• ADADADADAD

    JDBC的介绍与使用[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:57:02

    作者:文/会员上传

    简介:

    1. JDBC的介绍  jdbc为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。  访问数据库的流程  在连接这一过程中,一般初学者是MySQL和java在同一个

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    1. JDBC的介绍

      jdbc为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。
      访问数据库的流程

      在连接这一过程中,一般初学者是MySQL和java在同一个电脑上,建立socket连接。
      常用接口:-一般针对java开发使用Driver接口就行 ,- 在连接数据库时,需要装载特定厂商的数据驱动程序:
       MySQL:Class.forname(‘com.mysql.jdbc.Driver’);
       Oracle:Class.forname(‘oracle.jdbc.driver.OracleDriver’);

    2.JDBC重要的API(以MySQL为例)

    建立连接:

     @Testpublic void getConnect(){try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//获取连接String url="jdbc:mysql://localhost:3306/library";String user="root";String password="123456";Connection connection = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();}}

    Statement
    注意:这里Statement- 用于执行静态SQL语句并返回它所生成的结果对象,这里的Statement有三个类:
     - Statement由createStatement创建,用于发送简单的SQL语句。(不带参)
     - PreparedStatement:继承自Statement父类,由preparedStatement创建,用于发送含有一个或多个输入参数的SQL语句。PreparedStatement对象比Statement对象效率更高,并且可以防止SQL注入。
     - CallableStatement:继承自PreparedStatement。由方法prePareCall创建,用于调用存储。
    常用的Statement的方法有:
     - execute():运行语句,返回是否有结果集
     - executeQuery():运行select语句,返回ResultSet结果集
     - executeUpdate():运行insert/update/delete操作,返回影响的行数
    相关代码:

    @Testpublic void testStatement() throws SQLException {//创建StatementStatement statement = connection.createStatement();String sql="select * from book";booleanisNull= statement.execute(sql);//创建PreparedStatementsql="select * from book";PreparedStatement preparedStatement1 = connection.prepareStatement(sql);ResultSet resultSet = preparedStatement1.executeQuery();//PreparedStatement防止SQL注入,这里的?表示占位符sql="select * from book where bid = ?";PreparedStatement preparedStatement2 = connection.prepareStatement(sql);preparedStatement2.setObject(1,2);preparedStatement2.executeQuery();}

    ResultSet
    描述:ResultSet 主要是由executeQuery()方法执行返回
    读取数据的流程图:

    例:

    @Testpublic void testStatement() throws SQLException {//创建PreparedStatementString sql = "select * from book";PreparedStatement preparedStatement1 = connection.prepareStatement(sql);ResultSet resultSet = preparedStatement1.executeQuery();while(resultSet.next()){ //表示是否还有下一个System.out.println("bid"+resultSet.getInt(1));System.out.println("bname"+resultSet.getString(2));System.out.println("author"+resultSet.getString(3));}}

    jdbc的批处理

    注意:如果使用大量的批处理时,建议使用statement,因为preparedstatement的预编译空间有限,当数据量特别大时,会发生异常。
    例:

    @Testpublic void testStatement() throws SQLException {//创建StatementStatement statement = connection.createStatement();for (int i = 0; i < 50; i++) {//获得当前的系统时间long timestamp = System.currentTimeMillis();String sql = "insert into t_date(t_time,t_id) values(" + timestamp + "," + i + ")";//为批处理添加执行的SQL语句statement.addBatch(sql);}//执行批处理statement.executeBatch();//提交事务connection.commit();}

    jdbc的事务

    @Testpublic void testTransaction() {//取消自动提交try {connection.setAutoCommit(false);//插入一条DML语句PreparedStatement stetm1 = connection.prepareStatement("insert into book values(1001,'朝花夕拾','鲁迅')");stetm1.execute();//插入另条DML语句PreparedStatement stetm2 = connection.prepareStatement("insert into book values(1001,'海贼王','尾田一郎')");stetm2.execute();//提交connection.commit();} catch (SQLException e) {try {//失败后自动回滚connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}}

    CLOB操作:
    用于存储大量的文本数据,大字段的操作常常以流的方式处理。而非一般的字段一次读取即可。

    //代码实现:public class ReadAndWriteClob {public static void main(String[] args) {//获取数据库连接try {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/library","root","123456");//clob字段插入//表:user_info//字段:name varchar , introduceclobString sql = "insert into user_info values(?,?)";PreparedStatement prepared1 = conn.prepareStatement(sql);//插入数据prepared1.setObject(1, "user1");//设置插入文本对象,第二个参数是一个输入流,直接读取文件prepared1.setClob(2,new BufferedReader(new InputStreamReader(new FileInputStream("src/a.txt"))));prepared1.execute();//clob字段读取sql="select * from user_info";PreparedStatement prepared2 =conn.prepareStatement(sql);ResultSet resultSet = prepared2.executeQuery();while(resultSet.next()){Clob introduce = resultSet.getClob("introduce");Reader characterStream = introduce.getCharacterStream();int temp=0;while((temp=characterStream.read())!=-1){System.out.print((char)temp);}}} catch (Exception e) {e.printStackTrace();}}}

    BLOB操作:
    用于存储大量的二进制数据,二进制可以存入任何类型的文件(音频、视频等等..)。

    //代码实现public class ReadAndWriteClob {public static void main(String[] args) {//获取数据库连接try {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/library","root","123456");//clob字段插入//表:user_info//字段:name varchar , headImgblobString sql = "insert into user_info values(?,?)";PreparedStatement prepared1 = conn.prepareStatement(sql);//插入数据prepared1.setObject(1, "user1");//设置插入图片对象,第二个参数是一个基本输入流prepared1.setBlob(2,new FileInputStream("src/a.jpg"));prepared1.execute();//clob字段读取sql="select * from user_info";PreparedStatement prepared2 =conn.prepareStatement(sql);ResultSet resultSet = prepared2.executeQuery();while(resultSet.next()){Blob headImg = resultSet.getBlob("headImg");//获取的是基本的流,InputStream binaryStream = headImg.getBinaryStream();int len=0;byte flush []=new byte [1025];OutputStream os=new FileOutputStream(new File("d:\\c.jpg")); while((len=binaryStream.read(flush))!=-1){ os.write(flush,0,len); os.flush(); }os.close();binaryStream.close();}} catch (Exception e) {e.printStackTrace();}}}

    对jdbc的封装
    这里需要加载配置文件:

    代码实现:

    public class jdbcUtils {private static Properties pro;static {try {pro = new Properties();InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("dbproperties.properties");pro.load(in);Class.forName(pro.getProperty("driver"));} catch (Exception e) {e.printStackTrace();}}//建立与数据库的连接public static Connection getMySQLConn(){try {return DriverManager.getConnection(pro.getProperty("url"),pro.getProperty("user"),pro.getProperty("password"));} catch (SQLException e) {e.printStackTrace();}return null;}/** * 关闭顺序:resultSet --preparStatement -- Connection * 在关闭时,不能讲这三者的close()写在同一个try{}catch{}中 */public static void close(Statement stem,ResultSet rs,Connection conn){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stem!=null){try {stem.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
    JDBC的介绍与使用.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: JDBC使用