如何将数据(实际上是 Jtable 数据)添加到数据库中。有没有办法使用preparedstmt将对象插入数据库?
Posted
技术标签:
【中文标题】如何将数据(实际上是 Jtable 数据)添加到数据库中。有没有办法使用preparedstmt将对象插入数据库?【英文标题】:How to add data (Jtable data actually) into database. Is there any way to insert an object into database using preparedstmt? 【发布时间】:2014-04-04 17:55:00 【问题描述】:public cntctus()
JTable
的列名
String column[]= "Name","Position","Phone";
JTable
的行
Object [][]row =
"Prof. Renu Vig", "Director", "+123456",
"Mr. Sukhbir singh", "Assistant Professor", "+9123568989",
"Ms. shaweta", "BI teacher","9468645"
;
table = new JTable(row,column);
TableModel tm = table.getModel();
java.sql.Connection con=null;
try
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/training","root","");
try
java.sql.Statement stmt =con.createStatement();
String maketable = "CREATE TABLE if not exists contacttable(Name Varchar(25),Position Varchar(20),Phone Varchar(20))";
stmt.executeUpdate(maketable);
System.out.print("table created ");
//insert into table contacttable query
PreparedStatement pstmt=con.prepareStatement("INSERT into contacttable select distinct values(?,?,?)");
获取一些包含数据的TableModel
for (int i = 0; i < tm.getRowCount(); i++)
for (int j = 0; j < tm.getColumnCount(); j++)
Object o = tm.getValueAt(i, j);
System.out.println("object from table is : " +o);
k=j+1;
pstmt.setString(k, (String)o);
pstmt.executeUpdate();
catch(SQLException s)
System.out.println(s);
catch(Exception e)
e.printStackTrace();
我想将整个对象插入到数据库中。简而言之,如何将 jtable 数据插入到数据库中。??请帮忙。
错误是:第 1 行的 sql 语法有错误('"prof.renu vig, "director"...
【问题讨论】:
【参考方案1】:如果您想在准备好的语句中包含多行,您可以使用您现在拥有的内容,并在外部循环内部和内部循环外部添加对 pstmt.addBatch() 的调用(循环遍历 JTable,IE 每行添加一次批处理)。然后在您遍历整个表后调用 pstmt.executeBatch()。
不过,明智的说法是,如果您在插入时生成密钥,驱动程序还必须支持在批量插入时返回多个密钥,否则您可能只会得到第一个生成的密钥,而不是所有密钥。或者,您可以在外部循环的每次迭代中执行该语句(即每行一次),确保在每次执行后调用 .clearParamters()。出于性能原因,您将希望重用preparedStatement。
您的插入语句也搞砸了。它只是将插入到联系人表值(?,?,?)。摆脱选择不同的东西。
完成后大概是这样的:
String column[]= "Name","Position","Phone";
Object [][]row =
"Prof. Renu Vig", "Director", "+123456",
"Mr. Sukhbir singh", "Assistant Professor", "+9123568989",
"Ms. shaweta", "BI teacher","9468645"
;
JTable table = new JTable(row,column);
TableModel tm = table.getModel();
java.sql.Connection con=null;
try
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/training","root","");
java.sql.Statement stmt =con.createStatement();
String maketable = "CREATE TABLE if not exists contacttable(Name Varchar(25),Position Varchar(20),Phone Varchar(20))";
stmt.executeUpdate(maketable);
System.out.print("table created ");
PreparedStatement pstmt=con.prepareStatement("INSERT INTO contacttable VALUES(?,?,?)");
for (int i = 0; i < tm.getRowCount(); i++)
for (int j = 0; j < tm.getColumnCount(); j++)
Object o = tm.getValueAt(i, j);
System.out.println("object from table is : " +o);
pstmt.setString(j+1, (String)o);
pstmt.executeUpdate();
pstmt.clearParameters();
catch (Exception e)
e.printStackTrace();
【讨论】:
好的。让我解释一下我对代码所做的更改:- /* 获取一些包含数据的表模型 */ for (int i = 0; i您必须对代码进行的唯一一项更改,即
for (int i = 0; i < tm.getRowCount(); i++)
for (int j = 0; j < tm.getColumnCount(); j++)
Object o = tm.getValueAt(i, j);
System.out.println("object from table is : " +o);
pstmt.setObject(j+1, o);
它将您的实际 JTable 数据发送到您的数据库文件中。 我相信。它会起作用的。
【讨论】:
【参考方案3】:我有一个 jpa 的例子,希望对你有所帮助
试试
TableModel tm= table.getModel();
for (int i = 0; i < tm.getRowCount(); i++)
Object NumeroCin=tm.getValueAt(i, 0);
Object Nomprenom=tm.getValueAt(i, 1);
Object Tel =tm.getValueAt(i, 2);
Object Adresse =tm.getValueAt(i, 3);
Object DateNaissance=tm.getValueAt(i, 5);
Object Sexe=tm.getValueAt(i, 4);
Etudiant e=new Etudiant();
e.setAdresse((String) Adresse);
e.setDateNaissance((String) DateNaissance);
e.setNomprenom((String) Nomprenom);
e.setNumeroCin((String) NumeroCin);
e.setSexe( (String) Sexe );
e.setTel((String) Tel);
Ajouterobjet(e);
catch (Exception e)
e.printStackTrace();
public void Ajouterobjet(Object o)
EntityTransaction tx=entityManager.getTransaction();
tx.begin();
entityManager.persist(o);
tx.commit();
【讨论】:
以上是关于如何将数据(实际上是 Jtable 数据)添加到数据库中。有没有办法使用preparedstmt将对象插入数据库?的主要内容,如果未能解决你的问题,请参考以下文章