在表

时间:2015-11-01 23:29:27

标签: java mysql sql jdbc resultset

因此,我尝试根据特定的表格及其列添加表格中的行,但我不知道为什么我没有得到我想要的内容

这是我做的:

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行添加值。

2 个答案:

答案 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上有uniqueColA约束,那么在尝试插入第三行时会发生什么?那是你的约束违规的来源。

我无法提供解决方案,因为我不了解您的目标。整个模型似乎颠倒了。您将行视为列,将列视为行。列是每行必须遵守的固定结构。行是您插入,更新或删除的动态条目集。

如果您尝试更新给定行的每列的值,则需要SQL UPDATE语句而不是INSERT,但您还需要标识该行。您没有在代码中识别任何特定行,因此您不清楚应该更新哪一行。

这听起来像是一个XY问题。你有问题X,认为Y是解决方案,并且在做Y时请求帮助。但是如果我们理解X,我们可以提供不同的解决方案。