写点什么

Java 进阶 (二十三)java 中 long 类型转换为 int 类型

  • 2022 年 9 月 17 日
    上海
  • 本文字数:7479 字

    阅读完需:约 25 分钟

Java进阶(二十三)java中long类型转换为int类型

由 int 类型转换为 long 类型是向上转换,可以直接进行隐式转换,但由 long 类型转换为 int 类型是向下转换,可能会出现数据溢出情况:

      主要以下几种转换方法,供参考:

一、强制类型转换

long ll = 300000;  int ii = (int)ll;  
复制代码

二、调用 intValue()方法

long ll = 300000;  
int ii= new Long(ll).intValue();  
复制代码

三、先把 long 转换成字符串 String,然后在转行成 Integer

long ll = 300000;  
int ii = Integer.parseInt(String.valueOf(ll)); 
复制代码

这三种方法都比较简单明了。

四、延伸阅读 Java List 集合 add 与 set 方法原理简介

add 方法

add 方法用于向集合列表中添加对象。

语法 1

用于在列表的尾部插入指定元素。如果 List 集合对象由于调用 add 方法而发生更改,则返回 true;否则返回 false。add(E e) e:要添加到列表中的元素。

实例


public static void main(String[] args) {    List<String> list=new ArrayList<String>();    list.add("保护环境");     //向列表中添加数据    list.add("爱护地球");     //向列表中添加数据    list.add("从我做起");     //向列表中添加数据    //通过循环输出列表中的内容    for(int i=0;i<list.size();i++){     System.out.println(i+":"+list.get(i));    }}
复制代码


语法 2

用于在列表的指定位置插入指定元素,并将当前处于该位置的元素及其后续元素的索引加 1。void add(int index, E element)

  • index:用于指定在其中插入指定元素处的索引。

  • element:用于指定要插入的元素。

索引值从 0 开始。

set 方法

Set 方法用于替换集合列表中的元素。

void set(int index, E element)

将 index 索引处的元素替换成 element 对象,并返回新元素。

​五、延伸阅读 Java 连接 mysql 数据库(底层实现)

5.1 前言

      很长时间没有系统的使用 java 做项目了。现在需要使用 java 完成一个实验,其中涉及到 java 连接数据库。让自己来写,记忆中已无从搜索。特将之前使用的方法做一简单的总结。也能够在底层理解一下连接数据库的具体步骤。

5.2 实现

      首先需要导入相关的 jar 包,我使用的为:mysql-connector-java-5.1.7-bin.jar。

      下面来看一下我所使用的数据库连接方法类:

MysqlUtil.java


package cn.edu.ujn.util; import java.lang.reflect.Field;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; import cn.edu.ujn.base.Const;import cn.edu.ujn.dao.UserDao;import cn.edu.ujn.model.User; public class MysqlUtil {// 定义数据库的用户名private final static String USERNAME = Const.USERNAME;// 定义数据库的密码private final static String PASSWORD = Const.PASSWORD;// 定义数据库的驱动信息private final String DRIVER = Const.DRIVER;// 定义访问数据库的地址private final static String URL = Const.URL;// 定义数据库的链接private static Connection connection;// 定义sql语句的执行对象private static PreparedStatement pstmt;// 只有在获得了Statement之后才可执行SQL语句// 定义查询返回的结果集合private static ResultSet resultset; public MysqlUtil() { try {Class.forName(DRIVER);// 显式地加载 JDBC 驱动程序System.out.println("注册驱动成功!");} catch (Exception e) {System.out.println("注册驱动失败!");}} /** * 定义获得数据库的链接,试图建立到给定数据库 URL 的连接 *  * @return connection */public static Connection GetConnection() { try {connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);System.out.println("数据库连接成功!");} catch (Exception e) {System.out.println("数据库连接失败!");}return connection;} /** * 完成对数据库表的增加、删除、更新操作 *  * @param sql * @param params * @return flag * @throws SQLException */public static boolean updateByPreparedStatement(String sql, List<Object> params)// 第二个参数为传输的占位符throws SQLException { //加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();boolean flag = false; // 表示当用户执行添加、删除、修改时所影响数据库的行数int result = -1;try {pstmt = connection.prepareStatement(sql);} catch (Exception e) {System.out.println("Error in updateByPreparedStatement!");} // 表示占位符的第一个位置int index = 1; // 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {// System.out.println(i+"    "+params.get(i));// 使用给定对象设置指定参数的值。第二个参数必须是Object类型pstmt.setObject(index++, params.get(i));}}result = pstmt.executeUpdate();// 用于执行DML语句-返回一个整数,代表被SQL语句影响的记录条数flag = result > 0 ? true : false;System.out.println("执行SQL语句影响的记录条数为:" + result);//关闭数据库MysqlUtil.releaseConn();return flag;}/** * 查询返回单条记录 *  * @param sql * @param params * @return map * @throws SQLException */public static Map<String, Object> findSimpleResult(String sql, List<Object> params)throws SQLException { //加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();// 菱形语法在Java7及以后可用Map<String, Object> map = new HashMap<String, Object>(); // 表示占位符的第一个位置int index = 1; // 此句很重要,需要进行预编译pstmt = connection.prepareStatement(sql); // 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) { // 第一个是指你SQL语句中的第几个参数,第二个是要设置的值pstmt.setObject(index++, params.get(i));}} // 返回查询结果resultset = pstmt.executeQuery(); // 获取此 ResultSet 对象的列的编号、类型和属性。java.sql.ResultSetMetaData metdata = resultset.getMetaData(); // 获取列数int col_lenth = metdata.getColumnCount();boolean flag = resultset.next();if (!flag) {System.out.println("Found nothing!");}while (resultset.next()) {for (int i = 0; i < col_lenth; i++) { // 获取指定列的名称String cols_name = metdata.getColumnName(i + 1); // 通过列名获得指定列的属性值Object cols_value = resultset.getObject(cols_name);if (cols_value == null) { // 由此可见,数据表中字段值不能为空cols_value = "";} // 将指定的值与此映射中的指定键关联(可选操作)。map.put(cols_name, cols_value);}}//关闭数据库MysqlUtil.releaseConn();return map;} /** * 通过反射机制访问数据库,查询前几页的内容 *  * @param sql * @param params * @param cls * @return * @throws Exception */public static <T> List<T> queryEvamall(String sql, List<Object> params,Class<T> cls) throws Exception { //加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();// 构造一个初始容量为 10 的空列表。List<T> list = new ArrayList<T>(); // 表示占位符的第一个位置int index = 1; pstmt = connection.prepareStatement(sql); // 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) { // 使用给定对象设置指定参数的值。第二个参数必须是Object类型pstmt.setObject(index++, params.get(i)); }} // 返回查询结果resultset = pstmt.executeQuery(); // 获取列的相关信息java.sql.ResultSetMetaData metdata = resultset.getMetaData(); // 获取列数int col_lenth = metdata.getColumnCount();while (resultset.next()) { // 通过反射机制创建一个实例T resultObject = cls.newInstance();for (int i = 0; i < col_lenth; i++) {String cols_name = metdata.getColumnName(i + 1);Object cols_value = resultset.getObject(cols_name);if (cols_value == null) {cols_value = "";} // 通过列名获得反射Field field = cls.getDeclaredField(cols_name); // 打开javabean的私有访问权限field.setAccessible(true);field.set(resultObject, cols_value);}list.add(resultObject);}//关闭数据库MysqlUtil.releaseConn();return list;}/** * 查询返回多条查询记录 *  * @param sql * @param params * @return * @throws SQLException */public static List<Map<String, Object>> findMoreResult(String sql,List<Object> params) throws SQLException {//加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();System.out.println("JJ");List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();// 表示占位符的第一个位置int index = 1;pstmt = connection.prepareStatement(sql);// 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) {pstmt.setObject(index++, params.get(i));// 使用给定对象设置指定参数的值。第二个参数必须是// Object类型}}try {resultset = pstmt.executeQuery();// 返回查询结果} catch (Exception e) {System.out.println("Error1!");// 调试用}ResultSetMetaData metdata = resultset.getMetaData();// 获取列的相关信息int col_lenth = metdata.getColumnCount();// 获取列数System.out.println("数据表列数为:" + col_lenth);// 调试用while (resultset.next()) {Map<String, Object> map = new HashMap<String, Object>();for (int i = 0; i < col_lenth; i++) {String cols_name = metdata.getColumnName(i + 1);// 获取列的名称,列从1开始Object cols_value = resultset.getObject(cols_name);if (cols_value == null) {cols_value = "";}map.put(cols_name, cols_value);}list.add(map);}//关闭数据库MysqlUtil.releaseConn();return list;} /** * jdbc的封装可以使用反射机制来封装 使用泛型方法 *  * @param sql * @param params * @param cls * @return * @throws Exception */public static <T> T findSimpleRefResult(String sql, List<Object> params,Class<T> cls) throws Exception {//加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();T resultObject = null; // 表示占位符的第一个位置int index = 1;pstmt = connection.prepareStatement(sql); // 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) { // 第一个是指你SQL语句中的第几个参数,第二个是要设置的值pstmt.setObject(index++, params.get(i));}} // 返回查询结果resultset = pstmt.executeQuery(); // 获取列的相关信息java.sql.ResultSetMetaData metdata = resultset.getMetaData(); // 获取列数int col_lenth = metdata.getColumnCount();while (resultset.next()) { // 通过反射机制创建一个实例resultObject = cls.newInstance(); for (int i = 0; i < col_lenth; i++) {String cols_name = metdata.getColumnName(i + 1);Object cols_value = resultset.getObject(cols_name);if (cols_value == null) {cols_value = "";}Field field = cls.getDeclaredField(cols_name); // 打开javabean的私有访问权限field.setAccessible(true);field.set(resultObject, cols_value);} }//关闭数据库MysqlUtil.releaseConn();return resultObject;} /** * 通过反射机制访问数据库 *  * @param sql * @param params * @param cls * @return * @throws Exception */public static <T> List<T> findMoreRefResult(String sql, List<Object> params, Class<T> cls) throws Exception { //加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();// 构造一个初始容量为 10 的空列表。List<T> list = new ArrayList<T>(); // 表示占位符的第一个位置int index = 1; pstmt = connection.prepareStatement(sql); System.out.println("MysqlUtil:" + params);// 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) { // 使用给定对象设置指定参数的值。第二个参数必须是Object类型pstmt.setObject(index++, params.get(i)); }} // 返回查询结果System.out.println("SHQ");resultset = pstmt.executeQuery();// 获取列的相关信息java.sql.ResultSetMetaData metdata = resultset.getMetaData(); // 获取列数int col_lenth = metdata.getColumnCount();while (resultset.next()) { // 通过反射机制创建一个实例T resultObject = cls.newInstance();for (int i = 0; i < col_lenth; i++) {String cols_name = metdata.getColumnName(i + 1);Object cols_value = resultset.getObject(cols_name);if (cols_value == null) {cols_value = "";} // 通过列名获得反射Field field = cls.getDeclaredField(cols_name); // 打开javabean的私有访问权限field.setAccessible(true);field.set(resultObject, cols_value);}list.add(resultObject);}//关闭数据库MysqlUtil.releaseConn();return list;} /** * 关闭数据库的链接 *  */public static void releaseConn() { if (resultset != null) {try {resultset.close();} catch (SQLException e) {e.printStackTrace();}}if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}} /** * 查询返回总页数 *  * @param sql * @param params * @return int * @throws SQLException */public static int cluPage(String sql, List<Object> params)throws SQLException { //存储总页数 int countPage = 0;//设置每页显示的记录数int size = 10;//加载数据库驱动new MysqlUtil();//连接数据库MysqlUtil.GetConnection();// 表示占位符的第一个位置int index = 1;// 此句很重要,需要进行预编译pstmt = connection.prepareStatement(sql);// 判断所填充的占位符是否有值;判断集合的标准方式if (params != null && !params.isEmpty()) {for (int i = 0; i < params.size(); i++) { // 第一个是指你SQL语句中的第几个参数,第二个是要设置的值pstmt.setObject(index++, params.get(i));}} // 返回查询结果resultset = pstmt.executeQuery();if (resultset.next()) {int total = resultset.getInt("total");countPage = (total%size  == 0 ? total/size : total/size + 1);}//关闭数据库MysqlUtil.releaseConn();System.out.println("总页数为:" + countPage);return countPage;}/** * 测试模块 *  * @param args */public static void main(String[] args) {User user = new User();user.setUid("18353102068");user.setLogin_time("1");user.setOut_time("1");user.setLast_time(10);System.out.println(new UserDao().add(user));}}
复制代码


      以上介绍了数据库的连接方法及常用的查询操作。

      其中的常量如下定义:

Const.java


package cn.edu.ujn.base; public class Const {// 定义数据库的IPpublic final static String IP = "localhost";// 定义数据库的端口public final static String DBPORT = "3308";// 定义数据库的名称public final static String DBNAME = "lab";// 定义数据库的用户名public final static String USERNAME = "lmapp";// 定义数据库的密码public final static String PASSWORD = "lmapp";// 定义数据库的驱动信息public final static String DRIVER = "com.mysql.jdbc.Driver";// 定义访问数据库的地址public final static String URL = "jdbc:mysql://" + IP + ":" + DBPORT + "/" + DBNAME;}
复制代码


      以上只是实现了 java 连接到数据库,要实现数据的插入等操作,还需要以下方法:

UserDao.java


package cn.edu.ujn.dao; import java.sql.SQLException;import java.util.ArrayList;import java.util.List; import cn.edu.ujn.model.User;import cn.edu.ujn.util.MysqlUtil; public class UserDao { MysqlUtil mysqlUtil = new MysqlUtil(); /** * 添加用户信息 *  * @param user * @return */public int add(User user) {try {String sql = "insert into lab_static_attribute(uid,login_time,out_time,last_time) values(?,?,?,?)";List<Object> params = new ArrayList<Object>();params.add(user.getUid());params.add(user.getLogin_time());params.add(user.getOut_time());params.add(user.getLast_time());return MysqlUtil.updateByPreparedStatement(sql, params) ? 1 : 0;}catch (SQLException e) {return 0;} }}
复制代码


      这里只是介绍了数据的增加方法,数据库的 CRUD 其它三种操作方法,请读者自行练习。

5.3 总结

      相比于框架实现数据库的操作,这里介绍的方法确实需要完成更多的代码。但是对于初学者来说,还是建议通过这种方法来完成数据库的操作。这样可以更多的了解数据库操作的底层操作行为。学知识讲究“知其然,更要知其所以然”。

发布于: 刚刚阅读数: 3
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Java进阶(二十三)java中long类型转换为int类型_Java_No Silver Bullet_InfoQ写作社区