-
JDBC 中的pstmt.setString(numb,(String)list.get(j));出错0
StringBuffer sql = new StringBuffer();
sql.append("insert into " + DBNAME + "." + TABLTEST);
Connection conn = JdbcUtil.getConnection();
PreparedStatement pstmt = JdbcUtil.getPreparedStatement(conn, sql.toString());
long startTime = System.currentTimeMillis();
try {
int count = 0;
int a = 0;
List<String> list = new LinkedList<String>();
/** 读取行 */
for (int i = 0; i < cu.getRowNum(); i++) {
/** 读取行中的所有列 */
for (int x = 0; x < cu.getColLineNum(i); x++) {
String name = cu.getString(i, x); // 第一行每列的数据
// System.out.print(name);
list.add(name);
// System.out.print(name+"-");
}
System.out.println( " ");
if(i==0){
sql.append("(");
for(int j = 0;j<list.size();j++){
sql.append(list.get(j)+", ");
}
sql.deleteCharAt(sql.length()-2);
sql.append(")");
sql.append(" values(");
for(int u = 0;u<list.size();u++){
sql.append("?,");
}
sql.deleteCharAt(sql.length()-1);
sql.append(")");
System.out.println(sql+"=");
list.clear();
}else {
for(int j = 0;j<list.size();j++){
// System.out.println(list.get(j)+"==");
int numb =j+1;
System.out.println(sql+"=");
System.out.println(j +" " +list.get(j));
pstmt.setString(numb,(String)list.get(j));
// conn.setAutoCommit(false); // 若改为true 插入中遇到主键冲突还会继续插入,具体看需求
// pstmt.addBatch();
}
list.clear();
问题补充:报错..求解
insert into test.test(id, psw, username, realname, sex, des, hiredate, role ) values(?,?,?,?,?,?,?,?)=
0 1
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3288)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3272)
at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4108)
at batchInsertDemo.SqlTest.addBatchTest(SqlTest.java:148)
at RederContext.CsvUtil.run(CsvUtil.java:129)
at RederContext.CsvUtil.main(CsvUtil.java:139)2012年8月30日 13:38
4个答案 按时间排序 按投票排序
-
采纳的答案
把 PreparedStatement pstmt = JdbcUtil.getPreparedStatement(conn, sql.toString());
放在
for(int j = 0;j<list.size();j++){ 之前2012年8月30日 13:47
-
是参数超出了范围
比如:
insert into test.test(id, psw, username, realname, sex, des, hiredate, role )
如果id是主键,自动增长,那么id就不需要
setStrig("id","");2012年8月30日 13:47
-
什么错误?
JDBC 中的pstmt.setString(numb,(String)list.get(j));
貌似里面会有一个null
当list=null是 是一个空指针
铁错误信息2012年8月30日 13:40
相关推荐
pstmt.setString(1, "liubei"); pstmt.setString(2, "liubei"); pstmt.setString(3, "刘备"); pstmt.executeUpdate(); pstmt.setString(1, "guanyu"); pstmt.setString(2, "guanyu"); pstmt.setString(3, ...
pstmt.setString(1, userName); // 用户名 pstmt.setString(2, pwd); // 密码 pstmt.setString(3, email); // 邮箱 pstmt.executeUpdate(); ``` 这里假设`conn`已经连接到数据库,`userName`、`pwd`和`email`...
pstmt.setString(1, book.getBookName()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setInt(5, book.getBookTypeId()); pstmt....
pstmt.setString(2, value2); pstmt.executeUpdate(); ``` 在使用完数据库资源后,记得关闭连接和相关对象,避免资源泄漏: ```java rs.close(); stmt.close(); conn.close(); ``` 此外,Oracle JDBC驱动还支持...
pstmt.setString(1, "China"); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { System.out.println(rs.getString("S_NAME")); } } ``` 3. **使用JDBC更新TPC-H数据库** - **插入记录** - 示例...
pstmt.setString(4, country.getPopulation()); pstmt.setString(5, country.getGdp()); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { try { pstmt.close(); conn...
pstmt.setString(1, username); pstmt.setString(2, password); pstmt.executeUpdate(); ``` - **登录验证**:查询用户是否存在,并比较密码。 ```java String sql = "SELECT * FROM Users WHERE username = ? AND...
pstmt.setString(3, address); pstmt.executeUpdate(); } public void delContact(int id) throws Exception{ String sql = "delete from contact where id=?"; Connection con = DBConnection....
pstmt.setString(2, "newPassword"); pstmt.executeUpdate(); ``` - **读取(Read)**:使用SELECT语句检索数据。例如,获取所有用户: ```java String sql = "SELECT * FROM users"; Statement stmt = connection....
pstmt.setString(2, user.getEmail()); pstmt.addBatch(); } pstmt.executeBatch(); ``` 在使用JDBC和PrepareStatement时,别忘了关闭资源,例如ResultSet、Statement和Connection,以避免内存泄漏。可以使用try...
2. 创建数据库连接:`Connection conn = DriverManager.getConnection(url, username, password)`,其中url是数据库的连接字符串,包含服务器地址、端口号以及数据库名。 3. 执行SQL:`Statement stmt = conn....
pstmt.setString(1, username); pstmt.setString(2, password); pstmt.setString(3, email); pstmt.executeUpdate(); ``` 2. **查询(Read)**:同样使用PreparedStatement,执行SELECT语句获取结果集。例如:...
pstmt.setString(1, "testUser"); pstmt.setString(2, "testPass"); int rowsAffected = pstmt.executeUpdate(); ``` 2. 删除(Remove):使用DELETE语句,同样通过Statement的executeUpdate()执行,例如: ```java ...
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger"); ``` 这里的URL `"jdbc:oracle:thin:@localhost:1521:ORCL"` 是Oracle数据库的默认连接格式,其中 `...
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); ``` 接下来,使用`Statement`或`PreparedStatement`对象来执行SQL语句。`Statement`用于执行静态...
pstmt.setString(1, row[0]); pstmt.setString(2, row[1]); pstmt.addBatch(); } pstmt.executeBatch(); ``` - 删除:使用`PreparedStatement`或`Statement`执行删除操作。 ```java String sql = "DELETE FROM ...
pstmt.setString(3, "userPassword"); int rowsAffected = pstmt.executeUpdate(); ``` 更新数据: ```java String updateSql = "UPDATE UserInfo SET Name = ? WHERE Id = ?"; pstmt = conn.prepare...
pstmt.setString(1, value1); pstmt.setString(2, value2); int rowsAffected = pstmt.executeUpdate(); ``` 2. 删(Delete):同样使用`PreparedStatement`,设置条件参数。例如: ```java String sql = "DELETE ...
pstmt.setString(2, "password1"); pstmt.executeUpdate(); ``` 2. 读取(Read): 查询数据是通过执行SELECT语句完成的。同样,可以使用`Statement`或`PreparedStatement`,但通常推荐后者以避免SQL注入。如下所示...
pstmt.setString(1, "new_value"); // 设置参数 int rowsAffected = pstmt.executeUpdate(); // 执行更新 System.out.println(rowsAffected + " rows affected."); pstmt.close(); conn.close(); } catch ...