因此,我尝试根据特定的表格及其列添加表格中的行,但我不知道为什么我没有得到我想要的内容
这是我做的:
Scanner kb = new Scanner(System.in);
sql = "SELECT * FROM " + TableName;
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
for(int i = 1; i<=columnsNumber; i++)
{
System.out.print(rsmd.getColumnName(i) + ": ");
row = kb.next();
sql = "INSERT INTO "+TableName+ "("+rsmd.getColumnName(i)+") VALUES ('"+row+"')";
stmt.executeUpdate(sql);
}
System.out.println();
但是,当我列出表格时(第一次添加值之后),我得到:
Table Name
=========================================
Col 1 Col 2
name
1234 null
我的SQL结果是:
INSERT INTO Tablename(Col 1) VALUES ('1234')
INSERT INTO Tablename(Col 2) VALUES ('name')
我不知道为什么要这样做,我想要完成的是:
Table Name
=========================================
Col 1 Col 2
1234 name
BTW:Col 1是主键 这是第一次,
当我尝试添加任何其他值时,我收到此错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
总结一下我想要完成的事情:我试图为同一行中的每一列添加一个条目 所以我想从第1列开始并添加第1行,然后转到第2列并向第1行添加值。
答案 0 :(得分:1)
您正在插入2行,并且一次只能设置1列。看起来您可能需要一个看起来更像的插入语句:
insert into Tablename(column 1, column 2, etc...) values (column 1 value, column 2 value, ...);
如果您仍想动态生成SQL语句,那么您将需要构建语句,然后只执行一次(在循环之外)。
此外,您看起来有一个唯一的索引阻止插入空字符串。
答案 1 :(得分:1)
INSERT
用于在表中创建新行。让我们逐步完成每次迭代的代码。
表架构
TestTable
ColA || ColB || ColC || ColD
------------------------------
代码:
for(int i = 1; i<=columnsNumber; i++)
{
System.out.print(rsmd.getColumnName(i) + ": ");
row = kb.next();
sql = "INSERT INTO "+TableName+ "("+rsmd.getColumnName(i)+") VALUES ('"+row+"')";
stmt.executeUpdate(sql);
}
首次迭代,运行此SQL:
INSERT INTO TestTable (ColA) VALUES ("first value");
现在你的表看起来像
TestTable
ColA || ColB || ColC || ColD
-----------------------------------
first value || null || null | null
再次运行代码
INSERT INTO TestTable (ColB) VALUES ("second value");
TestTable
ColA || ColB || ColC || ColD
-------------------------------------------
first value || null || null || null
null || second value || null || null
又一次迭代。
INSERT INTO TestTable (ColC) VALUES ("third value");
TestTable
ColA || ColB || ColC || ColD
--------------------------------------------------
first value || null || null || null
null || second value || null || null
null || null || third value || null
现在,如果primary key
上有unique
或ColA
约束,那么在尝试插入第三行时会发生什么?那是你的约束违规的来源。
我无法提供解决方案,因为我不了解您的目标。整个模型似乎颠倒了。您将行视为列,将列视为行。列是每行必须遵守的固定结构。行是您插入,更新或删除的动态条目集。
如果您尝试更新给定行的每列的值,则需要SQL UPDATE
语句而不是INSERT
,但您还需要标识该行。您没有在代码中识别任何特定行,因此您不清楚应该更新哪一行。
这听起来像是一个XY问题。你有问题X,认为Y是解决方案,并且在做Y时请求帮助。但是如果我们理解X,我们可以提供不同的解决方案。