java 重新学习 (七)
阅读原文时间:2023年07月10日阅读:1

一、mysql的InnoDB通过建立行级索确保事务完整性。,并以Oracle风格的共享锁来处理select语句。系统默认存储为InnoDB.

二、

-- mysql 创建表
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) DEFAULT 'LWS' NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)
如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

-- 删除表
DROP TABLE table_name ;
TRUNCATE TABLE; 清空表数据保留表结构
--修改表
ALTER TABLE testalter_tbl
MODIFY j BIGINT NOT NULL DEFAULT 100;

三、常用函数

  ifnull(a,b) 如果a为null,则返回b

  nullif(a,b)如果 a,b相等, 返回null。否则返回a

  if(a,b,c)  如果 a 为true,不等于0,且不等于null返回 b 否则返回c。

  isnull(a) 判断a 是否为空。

  case when age <=12 then ‘小孩’

    when age > 12 and age<=18 then ‘少年’

  end;

四、PreparedStatement   Statement  CallableStatement(用于执行存储过程)

     executeQuery(String sql) 该方法执行查询语句,并且返回查询结果对应的ResultSet对象

     executeUpdate(String sql)该方法执行DML语句返回受影响的行数,执行DDL返回0;

     execute 可执行任何sql,执行后第一个结果为ResultSet对象则返回true;如果执行后第一个结果为受影响行数或者没有任何结果,返回false;

     executeLargeUpdate  statement对象操作任何一条sqk影响的记录数大于Integer.MAX_VALUE 就应该使用executeLargeUpdate,放弃executeUpdate。

     setBinaryStream(int parameterIndex,InputStream x) 指定参数传入二进制流,从而实现blob数据保存到数据库的功能。

五、PreparedStatement 预编译sql语句性能更好,防止sql注入  。

六、CallableStatement 调用存储过程  callableStatement.prepareCall(" {call 过程名称(?,?,?,?)} ");

七、事务:原子性,一致性,隔离性,持久性。

八、Connection 遇到一个未处理的SQLException异常时,系统将会非正常退出,事务也会自动回滚。但如果程序捕获了该异常,则需要在异常处理块中显示地回滚事务。

九、Java8增强的批量更新,

   批量更新必须得到底层数据库的支持,通过DatabaseMetaData的supportsBatchUpdates() 方法来查看底层数据库是否支持、

十、利用资源池用于解决频繁请求,释放造成的性能下降。连接池程序启动时就建立足够的数据库连接,并将这些连接组成一个连接池。每次请求数据库请求数据库连接时么无须重新打开连接,而是从连接池中取出已有的连接使用,使用完后不再关闭数据库连接,而是直接将连接归还给连接池。