MySQL数据库学习

 数据库服务器 :装有数据库软件的一个电脑
    数据库:软件 MySQL Oracle
    数据表:一个表格,里面放着一条一条的数据,类似于Excel
    字段:表示该数据是什么数据,例如:姓名,年龄,性别

    数据行:一条完整的数据

JDBC连接数据库步骤:

//1. 注册驱动 JDBC连接MySQL
Class.forName("com.mysql.jdbc.Driver");

//2. 准备URL,是JDCB连接MySQL数据库的URL

String url = "jdbc:mysql://localhost:3306/javaee1707?useSSL=true";

//3. 通过DriverManager获取到连接对象

Connection conn = DriverManager.getConnection(url, "root", "123456");

System.out.println(conn);

//4. 关闭数据库连接,释放资源

conn.close();

还可以自己封装成一个工具类JDBCUtil,这个是自己写的,上面是利用jar包连接的

通过封装好的工具对数据库进行一系列的操作,下面知识简单的一个例子

//1. 通过已经封装好的JDBC工具类,获取到数据库的连接对象
Connection conn = JDBCUtil.getConnection();
try {
//2. 获取Statement,SQL语句运输者,将SQL语句运输到MySQL里面,让MySQL运行
st = conn.createStatement();
//3. 准备SQL语句
String sql = "create table WOW(heroID int not null primary key auto_increment,heroName char(30))";
//4. 通过Statement执行SQL语句
int count = st.executeUpdate(sql);
//5. 查看创建的结果

System.out.println("影响的行数:" + count);

防止sql注入,就是根据你的url规则直接登录

try {
conn = JDBCUtil.getConnection();
//2. 准备预处理SQL语句
String sql = "select * from user where name=? and password=?"; //?是数据占位符
//3. 获取PreparedStatement对象,传入的参数就是预处理的SQL语句
ps = conn.prepareStatement(sql);
//4. 准备参数
ps.setString(1, name);
ps.setString(2, password);
//5. 执行预处理之后的SQL语句
set = ps.executeQuery();

BeanUtils 
  是一个工具类,里面的方法都是静态修饰的,可以通过类名直接调用
  commons-beanutils-1.8.3.jar
  commons-logging-1.1.3.jar 日志支持包,没有这个包无法使用BeanUtils


  setProperty(Object bean, String name, Object value);
  Object bean 是按照JavaBean规定定义的类,这个类要求所有的成员变量私有化,并且对外提供对应的
  setter和getter方法
  String name 要赋值的属性名,这里是借助于反射的思想获取到对应setter方法
  Object value 要赋值给属性的数据
 
  getProperty(Object bean, String name);
  Object bean 是按照JavaBean规定定义的类,这个类要求所有的成员变量私有化,并且对外提供对应的
  setter和getter方法
  String name 要获取的属性的名字,这里实际调用大方法是对应的getter方法
  copyProperties(Object dest, Object orig) 
  Object dest 是要被复制的类对象

  Object orig 复制的源数据


实例:

User u = new User();
u.setName("小强");
//利用BeanUtils里面的方法来给对象属性赋值
try {
BeanUtils.setProperty(u, "age", 24);

System.out.println("name:" + u.getName());

dbutils

* 获取单个girl对象

 * 使用ResultSetHandler

QueryRunner qr = new QueryRunner();

Girl girl = qr.query(conn, sql, new ResultSetHandler<Girl>()

* 获取单个girl对象

* BeanHandler

Girl girl = qr.query(conn, sql, new BeanHandler<>(Girl.class));

 * 获取List集合Girl数据

 * BeanListHandler

List<Girl> list = qr.query(conn, sql, new BeanListHandler<>(Girl.class));

获取一个Gril对象
 使用的方法,

 QueryRunner query(Connection conn, String sql, ResultSetHandler rs, Object... params)

将数据库查询到的数据保存的到一个Object类型的数组中

Object[] arr = qr.query(conn, sql, new ArrayHandler());

将数据库查询到的所有数据,每一个数据行做成一个数组,把所有的数组放入到一个List集合中

List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());

/**
* 这里可以用到所有的增,删,该方法
* @throws SQLException
*/
@Test
public void testUpdate() throws SQLException {
String sql = "delete from girl where girlID=2";
Connection conn = JDBCUtil.getConnection();

QueryRunner qr = new QueryRunner();

qr.update(conn, sql);

JDBCUtil.close(conn, null);

//可以使用DbUitls里面的方法
//DbUtils.close(conn);

}

c3p0连接池:

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day38?useSSL=true</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">3</property>
<property name="maxPoolSize">6</property>
<property name="maxIdleTime">1000</property>
</default-config>

</c3p0-config>

代码

@Test
//使用XML配置文件的方式,创建C3P0连接池
public void testXML() throws Exception {
//创建c3p0核心类
//创建当前核心类,就会自动加载在src下的c3p0-config.xml
ComboPooledDataSource dataSource = new ComboPooledDataSource();
PreparedStatement pstmt = null;
Connection conn = dataSource.getConnection();
for (int i = 0; i < 10; i++) {
String sql = "insert into student(name) values(?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "逗比");
pstmt.executeUpdate();
}
pstmt.close();
conn.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值