您的位置:首页 > 编程语言 > Java开发

[note] java与DB

2015-06-05 23:54 399 查看
JDBC制定了统一的访问各类关系数据库的标准接口。JDBC API是面向对象的。常用的类和接口均在java.sql.*包中

1. 连接MySQL 

>>>  到http://maven.apache.org/下载包: mysql-connector-java-%version%.jar 并添加到java project中的build path中去即可使用此包

         //把 mysql-connector-java-%version%-sources.jar 包添加到source attachment 中则可查看该包的源码

         //1. 加载JDBC驱动

         Class.forName("com.mysql.jdbc.Driver");

        // 2. 建立连接

        //mysql默认端口为3306,localhost可以换为IP,如果是连接其他数据库就可以改为 jdbc:sqlserver://... 等

        String url="jdbc:mysql://localhost:3307/databaseName";  
String user="username";  //登录该DB的用户名密码
String psw="psw";

        Connection con=DriverManager.getConnection(url,user,psw);

         //3. 执行SQL语句使用Statement接口或者PreparedStatement接口

         String sql="insert into table1 values ('andy','music')";

         Statement statement=con.createStatement();

         statement.executeUpdate(sql);

        //关闭连接

         conn.close;

2. 执行静态SQL语句使用Statement  

>>>  String sql="insert into table1 values ('andy','music')";

         Statement statement=con.createStatement();

         statement.executeUpdate(sql);

3. 执行动态SQL语句使用PreparedStatement  

>>>  String sql="insert into table1 values (?,?')";

         PreparedStatement ps=con.preparedStatement(sql);

         ps.setInt(1,10);//paramIndex, value

         ps.setString(2,'lucas'); 

         ps.executeUpdate();

4. 获得查询结果集使用ResultSet

>>>  String sql="select * from table1";

         Statement statement=con.createStatement();

         ResultSet set= statement.executeQuery(sql);

         while(set.next()){

                      int id=set.get("id");

                      int name=set.get("name");}

PS: set.get(int columnIndex) or set.get(String columnName)都可以取出对应结果集中对应行列的值

5. 使用Statement执行sql语句

>>> insert,delete,update语句都可以用statement.executeUpdate(sql);

        int affectedCount=statement.executeUpdate("update table1 set name='june' where id=1");

        int affectedCount=statement.executeUpdate("delete from table1 where id=1");

        int affectedCount=statement.executeUpdate("insert into table1 values ('3','lucy')");

>>> select语句可以用execute(sql),可以返回多个ResultSet

        ResultSet set=statement.execute("select * from table1");

>>>任意sql语句可以用executeQuery(sql),返回一个ResultSet

6. 使用PreparedStatement执行sql语句

>>>insert,update,delete语句也可以用executeUpdate(); 

eg: String sql="update table1 set name='june' where id=?";

       PareparedStatement ps=conn.preparedStatement(sql);

       ps.setInt(1,1);

       ps.executeUpdate();

 >>> select语句可以用executeQuery(),可以返回ResultSet

>>> 注意sql中的?不能用来指定表名。否则执行ps.execute();会报错

eg: String sql="select * from table1 where name=?";

       PareparedStatement ps=conn.preparedStatement(sql);

       ps.setString(1,"jack");

       ResultSet set= ps.executeQuery();

 >>>任意sql语句可以用execute()

7. 连接DB时避免乱码:

>>> String url="jdbc:mysql://localhost:3306/databaseName?characterEncoding=utf8";

       Connection con=DriveManager.getConnection(url,username,psw);

8. 一般为数据库连接单独做一个类并定义一个连接的静态方法,需要使用时直接调用即可以避免代码重复资源浪费等问题

9. 关于Statement和PreparedStatement的区别

    一般executeUpdate() 函数用来执行insert,delete,update或没有返回的DDL语句,executeQuery()用来执行select语句,并且返回ResultSet类型;

 >>>Statement需要把sql语句放到函数中执行,如 

        Statement statement=con.createStatement();然后执行 execute(sql), executeUpdate(sql), executeQuery(sql);  //需要设参

 >>>PreparedStatement需要一开始就初始化sql,然后执行函数

        PreparedStatement ps=con.preparedStatement(sql);  ps.setInt(1,1); etc.. 然后执行  execute(), executeUpdate(), executeQuery(); // 不需要设参了

10. 获取表结构用ResultSetMetaData

>>> ResultSet set=statement.executeUpdate(sql);

       ResultSetMetaData metadata = set.getMetaData();

>>>metadata.getColumnCount(); //获取表的columns数量

       metadata.getColumnName(int columnIndex); //获取某一个column的名字,index从1开始

       metadata.getColumnTypeName(int columnIndex); //获取某一个column的类型名称,index从1开始
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: