如何将数据(实际上是Jtable数据)添加到数据库中。有没有办法使用preparedstmt将对象插入数据库?

时间:2014-04-04 17:55:01

标签: java sql swing jdbc jtable

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语法错误(&#39;&#34; prof.renu vig,&#34; director&#34; ... < / p>

3 个答案:

答案 0 :(得分:2)

如果你想在准备好的语句中有多行,你可以拿走你现在拥有的东西,并在外部循环内部和内部循环之外添加对pstmt.addBatch()的调用(循环迭代JTable,IE每行添加批次一次)。然后在遍历整个表之后调用pstmt.executeBatch()。

明智之言,如果你在插入时生成键,驱动程序还必须支持在批量插入时返回多个键,或者你可能只是生成第一个键而不是所有键。或者,您可以在外部循环的每次迭代中执行语句(每行一次IE),确保在每次执行后调用.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();
    }

答案 1 :(得分:0)

您的代码只有一项改变,即

 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数据发送到您的数据库文件中。 我确定。它会起作用。

答案 2 :(得分:-1)

我有一个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 Ajouter Objet(Object o){

     EntityTransaction tx=entityManager.getTransaction();
     tx.begin();
     entityManager.persist(o);
     tx.commit();


 }