用java做图书管理系统

img

img

img

img

有没有知道这个是什么情况的?为什么报错?该如何解决呢?为什么保存完数据后,数据库无法显示中文,中午全部变成问号❓?

数据库连接后面加useUnicode=true&characterEncoding=utf-8

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/242473
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Java中垃圾回收是什么?为什么要有垃圾回收?垃圾回收是指回收什么数据?
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-野生动物 中的内容
  • 除此之外, 这篇博客: 什么是Java泛型?泛型方法怎么定义? 泛型类怎么声明? 类型通配符是什么?中的 类型通配符 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 类型通配符一般是使用代替具体的类型参数。例如:List<?>.
    /**
     * 通配符?使用
     */
    public class GenericTest {
    	public static void main(String[] args) {
    		List<String> name = new ArrayList<String>();
    		List<Integer> age = new ArrayList<Integer>();
    		List<Number> number = new ArrayList<Number>();
    
    		name.add("alex");
    		age.add(21);
    		number.add(666);
    
    		getData(name);
    		getData(age);
    		getData(number);
    
    	}
    
    	private static void getData(List<?> data) {
    		System.out.println("data :" + data.get(0));
    	}
    }
    

    1. 类型通配符上限通过形如List<? extends Number>来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。
    public class GenericTest {
    	public static void main(String[] args) {
    		List<String> name = new ArrayList<String>();
    		List<Integer> age = new ArrayList<Integer>();
    		List<Number> number = new ArrayList<Number>();
    
    		name.add("alex");
    		age.add(21);
    		number.add(666);
    
    		//getUperNumber(name);
    		getUperNumber(age);
    		getUperNumber(number);
    
    	}
    
    	private static void getUperNumber(List<? extends Number> data) {
    		System.out.println("data :" + data.get(0));
    	}
    }
    

    类型通配符下限通过形如 List<? super Number>来定义,表示类型只能接受Number及其三层父类类型


    这是我目前所了解的Java泛型,欢迎批评指正😁~

    back to Top👆

  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    这个问题可能是因为数据库字符集与Java编码不一致导致的。以下是可能的解决方法:

    1. 确定数据库字符集和Java编码是否一致,如果不一致,需要进行调整。可以使用以下代码检查:

    String defaultCharset = Charset.defaultCharset().displayName(); //获取Java编码 Charset charset = Charset.forName("UTF-8"); //获取数据库字符集 if (charset.equals(Charset.forName(defaultCharset))) { System.out.println("字符集匹配"); } else { System.out.println("字符集不匹配,需要进行调整"); }

    1. 在数据库连接时,指定使用UTF-8字符集。可以使用以下代码实现:

    String url = "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"; Connection conn = DriverManager.getConnection(url, username, password);

    其中,test为数据库名称,username和password为连接数据库所需的用户名和密码。

    1. 在JDBC驱动程序加载之前,指定使用UTF-8字符集。可以使用以下代码实现:

    System.setProperty("file.encoding", "UTF-8"); Class.forName("com.mysql.jdbc.Driver");

    1. 在保存数据前,将Java字符串转换为UTF-8编码的字节数组,然后再存入数据库。代码示例:

    String str = "中文"; byte[] bytes = str.getBytes(Charset.forName("UTF-8")); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable (name) VALUES (?)"); pstmt.setBytes(1, bytes); pstmt.executeUpdate();

    1. 在从数据库读取数据时,将UTF-8编码的字节数组转换为Java字符串。代码示例:

    ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next()) { byte[] bytes = rs.getBytes("name"); String str = new String(bytes, Charset.forName("UTF-8")); System.out.println(str); }

    如果以上方法均不能解决问题,可能需要更深入地检查和调试。