数据库连接问题

本文介绍如何正确地在Java中使用JDBC向包含标识列的数据库表插入数据,包括设置IDENTITY_INSERT属性及调整PreparedStatement语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.castit.it;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Date;

public class TestJDBC2 {

/** * @param args */  public static void main(String[] args) {   if(args.length != 4) {    System.out.println("格式错误!");    System.exit(-1);   }

  int id = 0;   try {    id = Integer.parseInt(args[0]);   } catch (NumberFormatException e1) {    System.out.println("格式错误!");    System.exit(-1);   }

  String typeName = args[1];   int days = Integer.parseInt(args[2]);   float fk = Float.parseFloat(args[3]);   //ResultSet rs = null;   PreparedStatement stmt = null;   Connection conn = null;   try {    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_library","sa","");    stmt = conn.prepareStatement("insert into tb_bookType  values(?,?,?,?)");    //rs = stmt.executeQuery("select * from tb_bookInfo");    /*while(rs.next()) {    System.out.println(rs.getString("bookname"));    //System.out.println(rs.getInt("price"));    }*/    stmt.setInt(1, id);    stmt.setString(2,typeName);    stmt.setInt(3,days);    stmt.setFloat(4,fk);    stmt.executeUpdate();   } catch (ClassNotFoundException e) {   // TODO Auto-generated catch block    e.printStackTrace();   } catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }finally {    try {     /*if(rs != null) {      rs.close();     }*/     if(stmt != null) {      stmt.close();     }      if(conn != null) {       conn.close();      }    } catch (SQLException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }   }

 }

 

}

 

此时会提示这样的错误“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'tb_bookType' 中为标识列指定显式值。”所以应将 stmt = conn.prepareStatement("insert into tb_bookType values(?,?,?,?)"); 改为 stmt = conn.prepareStatement("insert into tb_bookType(id,typeName,days,fk) values(?,?,?,?)"); 此时有提示错误 “当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'tb_bookType' 中的标识列插入显式值。” 故还应改为 stmt = conn.prepareStatement("set identity_insert tb_bookType ON insert into tb_bookType(id,typeName,days,fk) values(?,?,?,?)"); 此时插入数据正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值