连接数据库需要导入的包(API接口)
链接:https://pan.baidu.com/s/1rAmg4HJcboCwskFwWgwpMg?pwd=h93b
提取码:h93b
连接数据库的四种方式
自主创建Driver对象
示例:
public static void main(String[] args) throws SQLException {
// //先创建驱动对象driver
// Driver driver = new Driver();
// //2,得到链接数据库的URL
// String URL="jdbc:mysql://localhost:3306/c_02";
// //将用户名和密码放入到Properties中
// Properties properties = new Properties();
// properties.setProperty("user","root");
// properties.setProperty("password","cwj");
// //调用驱动对象driver的connect方法
// Connection connect = driver.connect(URL, properties);
Connection connect = dbConnect.getconnection();
//使用工具类dbConnection连接数据库并执行sql语句
//sql语句
// String sql = "select * from emp";
String sql = "insert into emp values (0,'刘某','player',0,'1979-11-11',2000.0,null ,'10')";
//使用createStatement执行sql语句
Statement statement = connect.createStatement();
// ResultSet resultSet = statement.executeQuery(sql);
// if(resultSet!=null){
// System.out.println("链接数据库成功并执行查询整表emp");
//
// }
//关闭资源流
int i = statement.executeUpdate(sql);
System.out.println(i>0?"成功?":"失败?");
dbConnect.close(statement,connect);
// statement.close();
//connect.close();
}
加载properties文件连接数据库
示例
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
//通过配置文件来连接数据库
Properties properties = new Properties();
properties.load(new FileInputStream("src\\com\\tom\\mysql.properties"));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
使用druid连接数据库
注意://德鲁伊相当于将Properties加载user或password封装到自己的方法中。
Properties properties = new Properties();
properties.load(new FileInputStream(“src\com\tom\mysql.properties”));
只需加载配置文件即可;
user-这里是默认的root;
passwor-自己数据库的密码;
driver驱动-如果是mysql保持一致即可;
url-这里是链接本地mysql的c_02(数据库)-如果是使用mysql端口号为3306,即只需更改数据库的名字即可;
示例:
使用druid连接数据库并执行对应的sql语句
//德鲁伊有特有的连接方式-数据库连接池技术-可以限流和规范
//DruidDataSourceFactory
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
public class testDruid {
public static void main(String[] args) {
//德鲁伊相当于将Properties加载user或password封装到自己的方法中
try {
Properties properties = new Properties();
properties.load(new FileInputStream("src\\com\\tom\\mysql.properties"));
//德鲁伊有特有的连接方式-数据库连接池技术-可以限流和规范
//DruidDataSourceFactory
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
if(connection!=null){
System.out.println("连接数据库成功");
}else {
System.out.println("连接数据库失败");
}
//执行sql语句
String sql = "insert into emp values (0,'刘某','player',0,'1979-11-11',2000.0,null ,'10')";
Statement statement = connection.createStatement();
int i = statement.executeUpdate(sql);
System.out.println(i>0?"成功":"失败");
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用druid配置Dao来对mysql数据库操作
1,需要使用到刚才封装druidUtils-连接mysql数据
1,这里是将德鲁伊封装到druidUtils
public class druidUtils {
//创建一个druid数据库连接池
private static DataSource db;
static {
try {
Properties properties = new Properties();
properties.load(new FileInputStream("src\\com\\tom\\mysql.properties"));
//德鲁伊有特有的连接方式-数据库连接池技术-可以限流和规范
//DruidDataSourceFactory
db = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//用数据库连接池db连接mysql数据库
public static Connection getconnection() throws SQLException {
return db.getConnection();
}
//释放资源
public static void close( Statement statement,Connection connection){
try {
if(statement!=null){
statement.close();
}
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2,创建BasicDao
public class BasicDao<T> {
//这里需要用到泛型,泛型指具体的类型
//Dao需要使用到druid工具类来连接数据库
//Dao提供自己特有的查询选择器QueryRunner,来执行sql语句
//1,创建QueryRunner查询选择器
private QueryRunner queryRunner = new QueryRunner();
//编写BasicDao的对mysql数据库操作的方法
//1,sql(dml)语句
public int update(String sql ,Object... Parameters){
Connection connection = null;
//注意:...代表sql语句中多个?即使用PreparedStatement(sql)
try {
connection=druidUtils.getconnection();
return queryRunner.update(connection,sql,Parameters);
//queryRunner.update(connection,sql,Parameters);等价于封装PreparedStatement(sql)方法
} catch (SQLException e) {
//注意:这里报错需要更改为运行时异常
throw new RuntimeException(e);
} finally {
druidUtils.close(null,connection);
}
}
//执行sql(query)查询语句(注意:泛型返回值-对应的dom映射)
//1,查询多行多列,针对任意表
public List<T> sqlQuery(String sql,Class<T> clazz,Object... Parameters){
Connection connection = null;
//注意:...代表sql语句中多个?即使用PreparedStatement(sql)
try {
connection=druidUtils.getconnection();
//注意:new BeanListHandler<T>(clazz)->ResultSet->返回结果集
return queryRunner.query(connection,sql,new BeanListHandler<T>(clazz),Parameters);
} catch (SQLException e) {
//注意:这里报错需要更改为运行时异常
throw new RuntimeException(e);
} finally {
druidUtils.close(null,connection);
}
}
//查询单行多列,针对任意表
public T sqlQueryline(String sql,Class<T> clazz,Object... Parameters){
Connection connection = null;
//注意:...代表sql语句中多个?即使用PreparedStatement(sql)
try {
connection=druidUtils.getconnection();
//注意:new BeanHandler<T>(clazz)->ResultSet->返回结果集
return queryRunner.query(connection,sql,new BeanHandler<T>(clazz),Parameters);
} catch (SQLException e) {
//注意:这里报错需要更改为运行时异常
throw new RuntimeException(e);
} finally {
druidUtils.close(null,connection);
}
}
//查询单行单列,针对任意表
public Object sqlQueryObj(String sql,Object... Parameters){
Connection connection = null;
//注意:...代表sql语句中多个?即使用PreparedStatement(sql)
try {
connection=druidUtils.getconnection();
return queryRunner.query(connection,sql,new ScalarHandler(),Parameters);
} catch (SQLException e) {
//注意:这里报错需要更改为运行时异常
throw new RuntimeException(e);
} finally {
druidUtils.close(null,connection);
}
}
}
3.创建JavaBean映射数据库中的表
4,UserDao
public class UserDao extends BasicDao<User>{
}
5,使用UserDao
public static void main(String[] args) {
//创建UserDao对象
UserDao userDao = new UserDao();
//子类继承父类BasicDao可以调用父类的方法
String sql = "select * from user where id = ?";
List<User> users = userDao.sqlQuery(sql, User.class, 1);
for (User user: users) {
System.out.println(user);
}
}