1.先導入maven
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
2.創建加載ProPerties配置文件工具類
public class ProPertiesUtil {
public static Properties getProperties(String fileName) {
Properties properties = new Properties();
InputStream in = ProPertiesUtil.class.getClassLoader().getResourceAsStream(fileName);
try {
properties.load(in);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
}
3.創建mysql.properties
driverClassName=com.mysql.jdbc.Driver
username=root
password=******
url=jdbc:mysql://localhost:3306/test
initialSiz=5
maxActive=15
minIdle=5
4.創建連接數據庫的工具類
public class JDBCUtil {
private static DruidDataSource dataSource;
static {
Properties properties = ProPertiesUtil.getProperties("mysql.properties");
try {
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (Exception e) {
return null;
}
return connection;
}
public static void close(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
5.scala操作數據庫工具類
import java.sql.{Connection, PreparedStatement, ResultSet, ResultSetMetaData, Statement}
import scala.collection.mutable
import scala.collection.mutable.ListBuffer
object SqlProxy {
def executeSelectByBack(connection: Connection, sql: String, back: (ResultSet) => Unit, objects: Any*): Unit = {
val statement: PreparedStatement = connection.prepareStatement(sql)
if (objects != null && objects.nonEmpty) {
for (i <- objects.indices) {
statement.setObject(i + 1, objects(i))
}
}
val resultSet: ResultSet = statement.executeQuery()
back(resultSet)
resultSet.close()
statement.close()
}
def executeSelectOne(connection: Connection, sql: String, objects: Any*): mutable.HashMap[String, Any] = {
val preparedStatement: PreparedStatement = connection.prepareStatement(sql)
if (objects != null && objects.nonEmpty) {
for (i <- objects.indices) {
preparedStatement.setObject(i + 1, objects(i))
}
}
val resultSet: ResultSet = preparedStatement.executeQuery()
val resultMap = new mutable.HashMap[String, Any]()
val metaData: ResultSetMetaData = resultSet.getMetaData
val rowCount: Int = metaData.getColumnCount
if (resultSet.next()) {
for (i <- 1 to rowCount) {
resultMap.put(metaData.getColumnName(i), resultSet.getObject(i))
}
}
resultSet.close()
preparedStatement.close()
resultMap
}
def executeSelectAll(connection: Connection, sql: String, objects: Any*): ListBuffer[mutable.HashMap[String, Any]] = {
val preparedStatement: PreparedStatement = connection.prepareStatement(sql)
if (objects != null && objects.nonEmpty) {
for (i <- objects.indices) {
preparedStatement.setObject(i + 1, objects(i))
}
}
val resultSet: ResultSet = preparedStatement.executeQuery()
val resultList = new ListBuffer[mutable.HashMap[String, Any]]()
val metaData: ResultSetMetaData = resultSet.getMetaData
val rowCount: Int = metaData.getColumnCount
while (resultSet.next()) {
val hashMap = new mutable.HashMap[String, Any]()
for (i <- 1 to rowCount) {
hashMap.put(metaData.getColumnName(i), resultSet.getObject(i))
}
resultList.append(hashMap)
}
resultSet.close()
preparedStatement.close()
resultList
}
def executeUpdateOne(connection: Connection, sql: String, objects: Any*): Int = {
val preparedStatement: PreparedStatement = connection.prepareStatement(sql)
if (objects != null && objects.nonEmpty) {
for (i <- objects.indices) {
preparedStatement.setObject(i + 1, objects(i))
}
}
val resultCount: Int = preparedStatement.executeUpdate()
preparedStatement.close()
resultCount
}
def executeUpdateAll(connection: Connection, sql: String, objectList: List[Array[Any]]): Array[Int] = {
val preparedStatement: PreparedStatement = connection.prepareStatement(sql)
if (objectList != null && objectList.nonEmpty) {
objectList.foreach(arr => {
for (i <- arr.indices) {
preparedStatement.setObject(i + 1, arr(i))
}
preparedStatement.addBatch()
})
}
val resultCountList: Array[Int] = preparedStatement.executeBatch()
preparedStatement.close()
resultCountList
}
def executeInsertOne(connection: Connection, sql: String, objects: Any*): Option[Long] = {
val preparedStatement: PreparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
if (objects != null && objects.nonEmpty) {
for (i <- objects.indices) {
preparedStatement.setObject(i + 1, objects(i))
}
}
preparedStatement.executeUpdate()
val generatedKeys: ResultSet = preparedStatement.getGeneratedKeys
var keyNum: Option[Long] = None
if (generatedKeys.next()) {
keyNum = Some(generatedKeys.getLong(1))
}
generatedKeys.close()
preparedStatement.close()
keyNum
}
def executeInsertAll(connection: Connection, sql: String, objectList: List[Array[Any]]): ListBuffer[Long] = {
val preparedStatement: PreparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
if (objectList != null && objectList.nonEmpty) {
objectList.foreach(arr => {
for (i <- arr.indices) {
preparedStatement.setObject(i + 1, arr(i))
}
preparedStatement.addBatch()
})
}
preparedStatement.executeBatch()
val generatedKeys: ResultSet = preparedStatement.getGeneratedKeys
var keyNumList = new ListBuffer[Long]()
while (generatedKeys.next()) {
keyNumList.append(generatedKeys.getLong(1))
}
generatedKeys.close()
preparedStatement.close()
keyNumList
}
}
6.使用dbutils進行增刪改查
public static void selectOne() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from user where id=?";
try {
assert connection != null;
Map<String, Object> objectMap = queryRunner.query(connection, sql, new MapHandler(), 2);
System.out.println(objectMap);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
public static void selectList() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "select * from user";
try {
assert connection != null;
List<Map<String, Object>> mapList = queryRunner.query(connection, sql, new MapListHandler());
System.out.println(mapList);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
public static void update() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "update user set name=?,age=? where id=?";
try {
assert connection != null;
queryRunner.update(connection, sql, "zhangsan", 30, 1);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
public static void delete() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "delete from user where id=?";
try {
assert connection != null;
queryRunner.update(connection, sql, 1);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
public static void insertOne() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "insert into user(name,age) values(?,?)";
try {
assert connection != null;
int update = queryRunner.update(connection, sql, "zhangsan", 20);
System.out.println(update);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
public static void insertBach() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "insert into user(name,age) values(?,?)";
try {
assert connection != null;
Object[][] list = new Object[5][2];
list[0] = new Object[]{"zhangsan", 20};
list[1] = new Object[]{"zhangsan", 21};
list[2] = new Object[]{"zhangsan", 22};
list[3] = new Object[]{"zhangsan", 23};
list[4] = new Object[]{"zhangsan", 24};
queryRunner.batch(connection, sql, list);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
public static void insetOne() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = JDBCUtil.getConnection();
String sql = "insert into user(name,age) values(?,?)";
try {
assert connection != null;
Long id = queryRunner.insert(connection, sql, new ScalarHandler<Long>(), "zhangsan", 20);
System.out.println(id);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.close(connection);
}
}
小知識點:(數據庫插入數據時存在則替換)
create table `user_info`(
`uid` int(11) not null auto_increment primary key,
`last_name` char(20) not null,
`first_name` char(20) not null,
unique key `uid_unique` (`uid`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
1.當數據存在時,不插入數據
insert ignore into user_info(uid,last_name,first_name) values (1,'x','y');
2.當數據存在時,更新數據
insert into user_info(uid,last_name,first_name) values(1,'x','y') on duplicate key update last_name='x',first_name='x';
replace into user_info(uid,last_name,first_name) values (1,'x','y');