test_database.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import jpype
  2. import jpype.imports
  3. from jpype.types import *
  4. import sys
  5. def test_database():
  6. """测试达梦数据库连接和查询"""
  7. try:
  8. # 达梦数据库驱动路径
  9. dm_driver_path = "D:\\dmdbms\\drivers\\jdbc\\DmJdbcDriver18.jar"
  10. # 启动JVM
  11. jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % dm_driver_path)
  12. # 导入Java类
  13. from java.sql import DriverManager, Connection, Statement, ResultSet
  14. # 数据库连接信息
  15. url = "jdbc:dm://192.168.0.145:30236?charset=utf8"
  16. username = "WATERSHED"
  17. password = "WaterShed./1224"
  18. # 加载驱动
  19. from dm.jdbc.driver import DmDriver
  20. # 建立连接
  21. conn = DriverManager.getConnection(url, username, password)
  22. print("✅ 数据库连接成功")
  23. # 创建执行语句
  24. stmt = conn.createStatement()
  25. # 查询 WATERSHED_MODEL 表
  26. sql = "SELECT model_id, model_name, create_time, update_time FROM WATERSHED_MODEL"
  27. print(f"\n执行查询: {sql}")
  28. rs = stmt.executeQuery(sql)
  29. # 打印查询结果
  30. print("\n查询结果:")
  31. print(f"{'模型ID':<8} {'模型名称':<20} {'创建时间':<20} {'更新时间':<20}")
  32. print("-" * 80)
  33. count = 0
  34. while rs.next():
  35. model_id = rs.getLong("model_id")
  36. model_name = rs.getString("model_name")
  37. create_time = rs.getTimestamp("create_time")
  38. update_time = rs.getTimestamp("update_time")
  39. print(f"{model_id:<8} {model_name:<20} {str(create_time):<20} {str(update_time):<20}")
  40. count += 1
  41. print(f"\n查询到 {count} 条记录")
  42. # 检查是否有记录的创建时间为 null
  43. if count > 0:
  44. print("\n检查创建时间字段:")
  45. stmt2 = conn.createStatement()
  46. sql2 = "SELECT COUNT(*) AS null_count FROM WATERSHED_MODEL WHERE create_time IS NULL"
  47. rs2 = stmt2.executeQuery(sql2)
  48. if rs2.next():
  49. null_count = rs2.getInt("null_count")
  50. print(f"创建时间为 null 的记录数: {null_count}")
  51. if null_count > 0:
  52. print("⚠️ 发现创建时间为 null 的记录")
  53. # 尝试更新这些记录的创建时间
  54. print(f"\n尝试更新 {null_count} 条记录的创建时间...")
  55. sql3 = "UPDATE WATERSHED_MODEL SET create_time = SYSDATE, update_time = SYSDATE WHERE create_time IS NULL"
  56. affected_rows = stmt.executeUpdate(sql3)
  57. print(f"成功更新 {affected_rows} 条记录")
  58. # 提交事务
  59. conn.commit()
  60. print("✅ 事务提交成功")
  61. # 关闭资源
  62. rs.close()
  63. stmt.close()
  64. conn.close()
  65. print("\n✅ 测试完成")
  66. except Exception as e:
  67. print(f"\n❌ 发生异常: {type(e).__name__}: {e}")
  68. import traceback
  69. print(f"\n堆栈跟踪: {traceback.format_exc()}")
  70. finally:
  71. # 关闭JVM
  72. if jpype.isJVMStarted():
  73. jpype.shutdownJVM()
  74. if __name__ == "__main__":
  75. test_database()