JDBC连接数据库(一)

1. 在同一个类里面,连接数据库并操作数据

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

public class JdbcTest {
    public static void main(String[] args) throws  Exception{
        //主协议:子协议://主机名(IP地址也行):端口号(mysql统一为3306)/数据库名
        //指定明确的时区  是否SSL连接,返回一个Boolean值   字符集类型
        String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
        String userName="root";
        String password="123456";
        //1、加载驱动
        //三种方法的到Class对象  obj.getClass()  ClassName.class   Class.forName(完全限定名)
        // Class类实例--com.mysql.jdbc.Driver    堆中就产生一个Driver类的Class类型的实例--mysql的driver
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2、得到连接
        Connection connection= DriverManager.getConnection(url,userName,password);
        //3、得到statement对象
        Statement statement=connection.createStatement();
        //4、对表的操作
        String sql="insert into score1 values('03','03','100')";

        int r=statement.executeUpdate(sql);
        System.out.println("R="+r);
        System.out.println("连接成功");

    }
}

Statement接口

Statement statement=connection.createStatement();

sql语句的执行器,执行sql语句
executeUpdate(sql)方法,执行insert、update、delete,返回的结果是一个整数,表示影响的行数
executeQuery(sql)方法,执行select,返回一个结果集

ResultSet接口
用于保存结果集[一个表,行与列组成]

package com.kgc.one;

import com.kgc.one.utils.ConnectionUtils;

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

public class JdbcTest {
    public static void main(String[] args) throws  Exception{
      Connection conn=ConnectionUtils.getConn();
        Statement statement=conn.createStatement();
        String sql="select s_id,s_name,s_sex,s_age,c_id from student";//查出的结果集有5行
        //executeQuery()只能用来执行select语句
        ResultSet resultSet=statement.executeQuery(sql);
        //可以得到列名  列数
        ResultSetMetaData rsm=resultSet.getMetaData();
        //resultSet.next()  next()最开始指向第一行的前面next()指向下一行
        //next()有下一行时返回true  没有下一行时返回false   所以可以用while循环,输出所有的数据
        while(resultSet.next()) {
            //这里的行数是根据所查的结果集确定的
           int id= resultSet.getInt(1);
           String name=resultSet.getString(2);
           String sex=resultSet.getString(3);
           int age=resultSet.getInt(4);
           int c_id=resultSet.getInt(5);
            System.out.println(id+","+name+","+sex+","+age+","+c_id);
        }
        resultSet.close();
        statement.close();
    }
}

ResultSet  rs=statement.executeQuery("select * from score1")

2. 将操作数据库定义成一个方法,形参为sql语句

ClassesDao类

package com.kgc.one;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/*
* 将所有对表的操作全部写在这个类里面
* */
public class ClassesDao {
    public static int insert(String sql) throws Exception{
        String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
        String userName="root";
        String password="123456";
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, userName, password);
        Statement statement = connection.createStatement();
        //设置i只是为了显示插入了几行,判断有没有插入成功
        int i=statement.executeUpdate(sql);
        return i;
}
}

JdbcTest类

package com.kgc.one;
public class JdbcTest {
    public static void main(String[] args) throws  Exception{
      String sql="insert into score1 values(11,11,90)";
      System.out.println(ClassesDao.insert(sql));
    }
}

3.使用单例模式来创建连接对象,供所有用户来使用这个连接对象

之前创建的连接,只能使用一次,执行一次Sql语句就要连接一次,利用率低,利用单例模式创建一个连接,可以多次使用
ConnectionUtils类

package com.kgc.one.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
 * 使用单例模式构造一个连接对象
 */
public class ConnectionUtils {
    private static Connection conn=null;
    private static String driver="com.mysql.cj.jdbc.Driver";
    //根据自己来写:数据库名,用户名,密码
    private static String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
    private static String username="root";
    private static String password="123456";
    private ConnectionUtils(){}
    //每次只执行一次
    static {
        try{
            Class.forName(driver);
            conn= DriverManager.getConnection(url,username,password);
            System.out.println("连接成功");
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    //调用这个方法返回一个连接
    public static Connection getConn(){
        return conn;
    }
    //该方法调用Sql语句
    public static int executeUpdate(String sql) throws  Exception{
    	//先通过getConn()获得一个连接,再通过createStatement()方法得到Statement
        Statement statement=ConnectionUtils.getConn().createStatement();
        int result=statement.executeUpdate(sql);
        return result;
    }
}

JdbcTest类

package com.kgc.one;

import com.kgc.one.utils.ConnectionUtils;
public class JdbcTest {
    public static void main(String[] args) throws  Exception{
      String sql="insert into score1 values(11,11,90)";
        System.out.println(ConnectionUtils.executeUpdate(sql));
        System.out.println("添加成功");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值