Connection con = null ; PreparedStatement pstmt = null; try { con = this.getSqlMapClientTemplate().getDataSource().getConnection(); con.setAutoCommit(false); pstmt = con.prepareStatement("INSERT INTO AMS_BUSINESS_TODO(BUSINESS_TODO_ID, USER_ID, TABLE_ID, BUSINESS_LINK_ID, BUSINESS_LINK_SOURCE_ID, " + "ENTRY_ID, ENTRY_TITLE, TODO_BATCH_ID, TODO_STATE, HAPPEN_DATE, FILING_MODE, VALID_FLAG,TODO_SUBMIT_USER_ID)" //新增组织机构ID,角色ID以及提交人ID +"values(?,?,?,?,?,?,?,?,?,?,?,?,?)"); Long id = Long.valueOf(SequenceUtil.get_id(KeyConstant.AMS_BUSINESS_TODO_ID, list.size())); for (int i = 0; i < list.size(); i++) { list.get(i).setBusiness_todo_id(id + i); pstmt.setLong(1, id + i); pstmt.setLong(2, list.get(i).getUser_id()); pstmt.setLong(3, list.get(i).getTable_id()); pstmt.setLong(4, list.get(i).getBusiness_link_id()); pstmt.setLong(5, list.get(i).getBusiness_link_source_id()); pstmt.setLong(6, list.get(i).getEntry_id()); pstmt.setString(7, list.get(i).getEntry_title()); pstmt.setLong(8, list.get(i).getTodo_batch_id()); pstmt.setInt(9, list.get(i).getTodo_state()); pstmt.setTimestamp(10, list.get(i).getHappen_date()); pstmt.setInt(11, list.get(i).getFiling_mode()); pstmt.setInt(12, list.get(i).getValid_flag()); pstmt.setLong(13, list.get(i).getTodo_submit_user_id()); pstmt.addBatch(); } pstmt.executeBatch(); con.commit(); r.setMessage("导入完成"); r.setResult(id); r.setState(true); return r; } catch (SQLException e) { e.printStackTrace(); return R.falseState("导入失败"); }finally{ if(pstmt != null){ try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }如何给上述代码中的insert参数里面添加null值
时间: 2024-04-28 07:23:09 浏览: 51
要给上述代码中的INSERT参数里面添加null值,可以使用setNull()方法。例如,如果要将第11个参数设置为null,可以在循环中添加以下代码:
if (list.get(i).getHappen_date() == null) {
pstmt.setNull(10, java.sql.Types.TIMESTAMP);
} else {
pstmt.setTimestamp(10, list.get(i).getHappen_date());
}
这将检查Happen_date是否为null,如果是,则使用setNull()方法将第10个参数设置为null。否则,将使用setTimestamp()方法将Happen_date设置为第10个参数的值。同样,您可以使用setNull()方法来设置其他参数为null。
相关问题
final String UPDATE_SQL = "update User_ZC set Login=? where UserId=?"; int count = 0; try { Connection connn = SQLConn.openDB(); PreparedStatement pstmte = connn.prepareStatement(UPDATE_SQL); { pstmt.setInt(1, 1); pstmt.setString(2, usernum); count = pstmt.executeUpdate(); } } catch (SQLException e) { e.printStackTrace(); } if (count > 0){ request.getRequestDispatcher("ZCS.jsp").forward(request, response); }else{System.out.print("登陆失败");}优化代码
可以采用try-with-resources语句简化代码,同时可以将数据库连接池的实现替换为使用JNDI获取连接池,提高性能和安全性。另外,可以将错误信息输出到日志文件中,而不是控制台。优化后的代码如下:
```java
String UPDATE_SQL = "update User_ZC set Login=? where UserId=?";
int count = 0;
try (Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(UPDATE_SQL)) {
pstmt.setInt(1, 1);
pstmt.setString(2, usernum);
count = pstmt.executeUpdate();
} catch (SQLException e) {
logger.error("Failed to update user login status", e);
}
if (count > 0) {
request.getRequestDispatcher("ZCS.jsp").forward(request, response);
} else {
System.out.print("登陆失败");
}
```
package day0608.utils; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 连接池工具类
这是一个连接池工具类的代码,它使用阿里巴巴的Druid连接池来实现数据库连接的复用,避免频繁地创建和关闭数据库连接。通过读取配置文件中的数据库连接参数,创建Druid数据源,并通过数据源获取数据库连接。在使用完成后,需要将连接关闭并归还给连接池。以下是代码的详细解释:
1. 导入Druid相关的类和接口
```java
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
```
2. 创建连接池工具类
```java
public class ConnectionPoolUtil {
private static DataSource dataSource;
static {
try {
// 读取配置文件
InputStream inputStream = ConnectionPoolUtil.class.getClassLoader().getResourceAsStream("druid.properties");
Properties properties = new Properties();
properties.load(inputStream);
// 创建Druid数据源
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
// 关闭数据库连接
public static void closeConnection(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
3. 使用连接池工具类
```java
public class MyDao {
public List<User> getAllUsers() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<User> userList = new ArrayList<>();
try {
// 获取数据库连接
conn = ConnectionPoolUtil.getConnection();
pstmt = conn.prepareStatement("SELECT * FROM user");
rs = pstmt.executeQuery();
// 处理查询结果
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
ConnectionPoolUtil.closeConnection(conn, pstmt, rs);
}
return userList;
}
}
```
以上是连接池工具类的基本实现,可以在多线程环境下安全地使用。同时,Druid还提供了很多其他的功能,例如监控、防御SQL注入攻击等,可以根据实际需求进行配置和使用。
阅读全文