java JDBC使用简易教程

java中提供了一套标准接口,数据库厂商来进行实现,包含实现子类的jar文件一般情况下存放在数据库的安装目录下,使用时需在工程中导入相应jar包

以Oracle为例,记得在使用前导入ojdbc6.jar文件,不同数据库版本需要的ojdbc文件版本不同

数据库连接的代码如下

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

//如果需要建立连接,java中提供了一套标准,数据库厂商来进行实现,包含实现子类的jar文件一般情况下存放在安装目录下
public class JDBCTest {
    public static void main(String[] args) throws Exception {

        //1、加载驱动:
        /*
        * 当执行了当前代码之后,会返回一个Class对象,再此对象的创建过程中,会调用具体类的静态代码块
        * */
       Class.forName("oracle.jdbc.driver.OracleDriver");
       //2、建立连接
        //上一步中已经经driver对象初测到了drivermanager中,所以此时可以直接通过DriverManager来获取数据库的连接
        /*
        * 需要输入连接数据库的参数
        * url:数据库的地址
        * username:用户名
        * password:密码
        * */
        Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
        //3、测试连接是否成功
        System.out.println(connection);
        //4、定义sql语句
        //只要填写正常执行的sql语句即可
        String sql = "select * from emp";
        //5、准备静态处理块对象,将sql语句放置到静态处理块中,理解为sql语句放置对象
        /*
        * 在执行sql语句的过程中,需要一个对象来存放sql语句,将对象进行执行的时候调用的是数据库的服务,数据库会从当前对象中
        * 拿到对应的sql语句进行执行
        * */
		//Statement 在使用字符串拼接的方式拼接sql时会有sql注入的危险
		//使用其子类PrepareStatement可以排除字符串拼接sql的sql注入风险
        Statement statement = connection.createStatement();
        //6、执行sql语句,返回值对象是结果集合
        /*
        * 将结果放到resultset中,是返回结果的一个集合
        * 需要经过循环迭代才能获取到其中的每一条记录
        *
        * statement在执行的时候可以选择三种方式:
        * 1、execute:任何SQL语句都可以执行
        * 2、executeQueryL只能执行查询语句
        * 3、executeUpdate,只能执行DML语句
        * */
        ResultSet resultSet = statement.executeQuery(sql);
        //7、循环处理
        //使用while循环,有两种获取具体值的方式,第一种通过下表索引编号来获取,从1开始,第二种是通过列名来获取,推荐使用列名,列明一般不会发生修改
        while(resultSet.next()){
        	//通过列索引获取empno
            int anInt = resultSet.getInt(1);
            System.out.println(anInt);
            //通过列名获取ename
            String ename = resultSet.getString("ename");
            System.out.println(ename);
            System.out.println("-----------------");
        }
        //8、关闭连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

其他数据库获取驱动的方式如下:

//MySQL: 
String Driver="com.mysql.jdbc.Driver"; //驱动程序
String URL="jdbc:mysql://localhost:3306/db_name"; //连接的URL,db_name为数据库名注意自己的数据库端口号

//Oracle: 
String Driver="oracle.jdbc.driver.OracleDriver"; //连接数据库的方法
String URL="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID 

//PostgreSQL: 
String Driver="org.postgresql.Driver"; //连接数据库的方法
String URL="jdbc:postgresql://localhost/db_name"; //db_name为数据库名

//DB2: 
String Driver="com.ibm.dbjdbc.app.DBDriver"; //连接具有DB2客户端的Provider实例
//String Driver="com.ibm.dbjdbc.net.DBDriver"; //连接不具有DB2客户端的Provider实例
String URL="jdbc:db2://localhost:5000/db_name"; //db_name为数据库名

//Microsoft SQL Server : 
String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连接SQL数据库的方法
String URL="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名

String Username="username"; //用户名
String Password="password"; //密码
Class.forName(Driver) ; //加载数据库驱动
Connection con=DriverManager.getConnection(URL,Username,Password);

PrepareStatement使用的基本方式
可以根据自己的数据库数据进行修改

public class EmpDaoImpl implements EmpDao {
//EmpDao接口中的一个insert方法,Emp类对数据库的一行数据进行了封装,DBUtil对数据库连接进行了封装
//该方法体展示了如何使用PrepareStatement防止sql注入
    @Override
    public void insert(Emp emp) {
        Connection connection = null;
        PreparedStatement statement = null;
        try {
            connection = DBUtil.getConnection();
            //设置事务是否自动提交,true表示自动提交,false表示不是自动提交
//            connection.setAutoCommit(true);
            String sql = "insert into emp values(?,?,?,?,?,?,?,?)";
            statement = connection.prepareStatement(sql);
            //向问号中添加值
            statement.setInt(1,emp.getEmpno());
            statement.setString(2,emp.getEname());
            statement.setString(3,emp.getJob());
            statement.setInt(4,emp.getMrg());
            statement.setDate(5,new java.sql.Date(new SimpleDateFormat("yyyy-MM-DD").parse(emp.getHiredate()).getTime()));
            statement.setDouble(6,emp.getSal());
            statement.setDouble(7,emp.getComm());
            statement.setInt(8,emp.getDeptno());
            //返回值表示受影响的行数
            int i = statement.executeUpdate();
            System.out.println("受影响的行数是:" + i);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBUtil.closeConnection(connection, statement);
        }
    }
}

使用反射简化DAO的编写Java 反射API的简介及使用


PrepareStatement 批量提交sql

//打开链接一次,插入1000条数据后提交并关闭连接
    public static void insertBatch(){
        Connection connection = DBUtil.getConnection();
        PreparedStatement pstmt = null;
        String sql = "insert into emp(empno,ename) values (?,?)";
        //准备预处理快对象
        try {
            pstmt = connection.prepareStatement(sql);
            for(int i = 0;i<1000;i++){
                pstmt.setInt(1,i);
                pstmt.setString(2,"hehe"+i);
                //向批处理中添加sqk语句
                pstmt.addBatch();
            }
            int[] ints = pstmt.executeBatch();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.closeConnection(connection,pstmt);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值