最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

JDBC操作技巧

来源:懂视网 责编:小采 时间:2020-11-09 07:32:47
文档

JDBC操作技巧

JDBC操作技巧:对于纯JDBC连接数据库连接工具如下: public static final String DBDRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver; public static final String DBURL=jdbc:sqlserver://10.81.35.35:1433;dat
推荐度:
导读JDBC操作技巧:对于纯JDBC连接数据库连接工具如下: public static final String DBDRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver; public static final String DBURL=jdbc:sqlserver://10.81.35.35:1433;dat

对于纯JDBC连接数据库连接工具如下: public static final String DBDRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver; public static final String DBURL=jdbc:sqlserver://10.81.35.35:1433;databaseName=Company; public static final String DBUSER

对于纯JDBC连接数据库连接工具如下:

public static final String DBDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
 public static final String DBURL="jdbc:sqlserver://10.81.35.35:1433;databaseName=Company";
 public static final String DBUSERNAMW="sa";
 public static final String DBPSD="1111111";
 private Connection conn=null;
 
 public DataBaseConnection(){
 try{
 Class.forName(DBDRIVER);
 conn=DriverManager.getConnection(DBURL,DBUSERNAMW,DBPSD);
 }catch(Exception e){
 e.printStackTrace();
 }
 }

 public Connection getConnection(){
 return this.conn ;
 }
 
 public void close() throws SQLException{
 if(this.conn!=null){
 conn.close();
 }
 }

然后我们便是采用PreparedStatement对SQL语句进行预处理,如下:
PreparedStatement pstm = null;
 String sql = "insert into Person(UserName,Password) values(?,?)";
 try {
 pstm = this.conn.prepareStatement(sql);
 pstm.setString(1, person.getUserName());
 pstm.setString(2, person.getPassword());
 int count = pstm.executeUpdate();
 if (count > 0) {
 flag = true;
 }
 } catch (Exception e) {
 throw e;
 } finally {
 try {
 pstm.close();
 } catch (Exception e) {
 }
 }

这是我们最常用的一种操作方式,可是问题就来了,我们所要操作的,必须对sql中的字段很明确,比如我们按条件来查询的时候,我们就必须对条件的字段很清楚,可是,当数据库字段增多的时候,我们所要查询的条件规则很多,是不是每一个条件,我们就要写一个方法呢?显然,这种是直接的思维,然而这样思维却增加了很多代码的冗余,又或者说是,每次变换条件或者新增条件的时候,我们都必须对方法进行修改,甚至是增加。于是乎,我们想有没有一种方式可以传递字段名称进去查询,如where ?=?

本人亲测,这种方式是不存在的,因为预处理字段的时候,PreparedStatement会自动在字符串上加引号,那此时就不能达到我们想要的效果(如想要的是where name=? 得到的却是 where 'name'=?),本人曾经在这样的问题上纠结了很久。最终找到一种破解的方式,这里借鉴了IBatis的Map传参方式。希望同行爱好者,我们除了要学会使用框架或插件,得找个时间去研究一下它的原理(源码)哦。

对于where ?=? 显然是不可取,但是对于字符串占位就可以的。例子如下:

public List findByParams(Map params)
 throws Exception {
 Iterator it = params.entrySet().iterator();
 List list = new ArrayList();
 Person person = null;
 String key = null;
 Object value = null;
 PreparedStatement pstm = null;
 while (it.hasNext()) {
 Map.Entry entry = (Map.Entry) it
 .next();
 key = entry.getKey();
 value = entry.getValue();
 }
 String sql = String.format(
 "select userid,username,password from person where %s=?", key);
 pstm = this.conn.prepareStatement(sql);
 pstm.setObject(1, value);
 ResultSet rs = pstm.executeQuery();
 while(rs.next()) {
 person = new Person();
 person.setUserID(rs.getInt(1));
 person.setUserName(rs.getString(2));
 person.setPassword(rs.getString(3));
 }
 rs.close();
 pstm.close();
 return list;
 }

哈哈 此种方式可以替代where ?=?,参照ibatis

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

JDBC操作技巧

JDBC操作技巧:对于纯JDBC连接数据库连接工具如下: public static final String DBDRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver; public static final String DBURL=jdbc:sqlserver://10.81.35.35:1433;dat
推荐度:
标签: 操作 连接 技巧
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top