insert(3)

本文介绍了一个使用 Java JDBC 连接数据库并插入数据的简单示例。通过加载 JDBC ODBC 驱动,连接到名为 School 的数据源,并使用 PreparedStatement 对象设置 SQL 参数化查询来插入数据。

 package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Insert3 {

 public static void main(String[] args) {
  Connection conn = null;
  try{
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//指定驱动,表示连接到odbc
   conn = DriverManager.getConnection("jdbc:odbc:School","scott","tiger");//获取连接,odbc方式情况下,url格式:jdbc:odbc:数据源名称
   //2:运行SQL语句:Statement接口
   String stuId = "222";
   String stuName = "张三";
   String stuSex = "女";
   String stuAdd = "武汉";
   
   String sql = "INSERT INTO 学籍(学号,姓名,性别,家庭住址) VALUES(?,?,?,?)";
   PreparedStatement ps = conn.prepareStatement(sql);
   //将?用相应的值代替,ps.setXXX(参数序号,值)
   ps.setString(1, stuId);
   ps.setString(2, stuName);
   ps.setString(3, stuSex);
   ps.setString(4, stuAdd);   
   
   int i = ps.executeUpdate();
   System.out.println("添加" + i + "行");
  }
  catch(Exception ex){
   ex.printStackTrace();
  }
  finally{
   try{
    if(conn!=null){
     conn.close();
     conn = null;
    }
   }catch(Exception ex){}
  }

  

 }

}

12:07:10 | A-BEFORE | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1006368MB Time | Phase | PID VSZ(KB) RSS(KB) | Free(MB) 12:07:10 | INSERT 1: SUCCESS 12:07:10 | INSERT 2: SUCCESS 12:07:10 | INSERT 3: SUCCESS 12:07:10 | INSERT 4: SUCCESS 12:07:10 | INSERT 5: SUCCESS 12:07:10 | INSERT 6: SUCCESS 12:07:11 | INSERT 7: SUCCESS 12:07:11 | INSERT 8: SUCCESS 12:07:11 | INSERT 9: SUCCESS 12:07:11 | INSERT 10: SUCCESS 12:07:11 | INSERT 11: SUCCESS 12:07:11 | INSERT 12: SUCCESS 12:07:11 | INSERT 13: SUCCESS 12:07:11 | INSERT 14: SUCCESS 12:07:11 | INSERT 15: SUCCESS 12:07:11 | INSERT 16: SUCCESS 12:07:11 | INSERT 17: SUCCESS 12:07:11 | INSERT 18: SUCCESS 12:07:11 | INSERT 19: SUCCESS 12:07:12 | INSERT 20: SUCCESS 12:07:12 | INSERT 21: SUCCESS 12:07:12 | INSERT 22: SUCCESS 12:07:12 | INSERT 23: SUCCESS 12:07:12 | INSERT 24: SUCCESS 12:07:12 | INSERT 25: SUCCESS 12:07:12 | INSERT 26: SUCCESS 12:07:12 | INSERT 27: SUCCESS 12:07:12 | INSERT 28: SUCCESS 12:07:12 | INSERT 29: SUCCESS 12:07:12 | INSERT 30: SUCCESS 12:07:12 | INSERT 31: SUCCESS 12:07:12 | INSERT 32: SUCCESS 12:07:12 | INSERT 33: SUCCESS 12:07:13 | INSERT 34: SUCCESS 12:07:13 | INSERT 35: SUCCESS 12:07:13 | INSERT 36: SUCCESS 12:07:13 | INSERT 37: SUCCESS 12:07:13 | INSERT 38: SUCCESS 12:07:13 | INSERT 39: SUCCESS 12:07:13 | INSERT 40: SUCCESS 12:07:13 | INSERT 41: SUCCESS 12:07:13 | INSERT 42: SUCCESS 12:07:13 | INSERT 43: SUCCESS 12:07:13 | INSERT 44: SUCCESS 12:07:13 | INSERT 45: SUCCESS 12:07:13 | INSERT 46: SUCCESS 12:07:14 | INSERT 47: SUCCESS 12:07:14 | INSERT 48: SUCCESS 12:07:14 | INSERT 49: SUCCESS 12:07:14 | INSERT 50: SUCCESS 12:07:14 | B-INSERT-50 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005288MB 12:07:14 | INSERT 51: SUCCESS 12:07:14 | INSERT 52: SUCCESS 12:07:14 | INSERT 53: SUCCESS 12:07:14 | INSERT 54: SUCCESS 12:07:14 | INSERT 55: SUCCESS 12:07:14 | INSERT 56: SUCCESS 12:07:14 | INSERT 57: SUCCESS 12:07:14 | INSERT 58: SUCCESS 12:07:14 | INSERT 59: SUCCESS 12:07:14 | INSERT 60: SUCCESS 12:07:15 | INSERT 61: SUCCESS 12:07:15 | INSERT 62: SUCCESS 12:07:15 | INSERT 63: SUCCESS 12:07:15 | INSERT 64: SUCCESS 12:07:15 | INSERT 65: SUCCESS 12:07:15 | INSERT 66: SUCCESS 12:07:15 | INSERT 67: SUCCESS 12:07:15 | INSERT 68: SUCCESS 12:07:15 | INSERT 69: SUCCESS 12:07:15 | INSERT 70: SUCCESS 12:07:15 | INSERT 71: SUCCESS 12:07:15 | INSERT 72: SUCCESS 12:07:15 | INSERT 73: SUCCESS 12:07:16 | INSERT 74: SUCCESS 12:07:16 | INSERT 75: SUCCESS 12:07:16 | INSERT 76: SUCCESS 12:07:16 | INSERT 77: SUCCESS 12:07:16 | INSERT 78: SUCCESS 12:07:16 | INSERT 79: SUCCESS 12:07:16 | INSERT 80: SUCCESS 12:07:16 | INSERT 81: SUCCESS 12:07:16 | INSERT 82: SUCCESS 12:07:16 | INSERT 83: SUCCESS 12:07:16 | INSERT 84: SUCCESS 12:07:16 | INSERT 85: SUCCESS 12:07:16 | INSERT 86: SUCCESS 12:07:16 | INSERT 87: SUCCESS 12:07:17 | INSERT 88: SUCCESS 12:07:17 | INSERT 89: SUCCESS 12:07:17 | INSERT 90: SUCCESS 12:07:17 | INSERT 91: SUCCESS 12:07:17 | INSERT 92: SUCCESS 12:07:17 | INSERT 93: SUCCESS 12:07:17 | INSERT 94: SUCCESS 12:07:17 | INSERT 95: SUCCESS 12:07:17 | INSERT 96: SUCCESS 12:07:17 | INSERT 97: SUCCESS 12:07:17 | INSERT 98: SUCCESS 12:07:17 | INSERT 99: SUCCESS 12:07:17 | INSERT 100: SUCCESS 12:07:17 | B-INSERT-100 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005052MB 12:07:17 | QUERY 100: SUCCESS | Count = ? 12:07:18 | C-QUERY-100 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1004936MB 12:07:18 | INSERT 101: SUCCESS 12:07:18 | INSERT 102: SUCCESS 12:07:18 | INSERT 103: SUCCESS 12:07:18 | INSERT 104: SUCCESS 12:07:18 | INSERT 105: SUCCESS 12:07:18 | INSERT 106: SUCCESS 12:07:18 | INSERT 107: SUCCESS 12:07:18 | INSERT 108: SUCCESS 12:07:18 | INSERT 109: SUCCESS 12:07:18 | INSERT 110: SUCCESS 12:07:18 | INSERT 111: SUCCESS 12:07:18 | INSERT 112: SUCCESS 12:07:18 | INSERT 113: SUCCESS 12:07:19 | INSERT 114: SUCCESS 12:07:19 | INSERT 115: SUCCESS 12:07:19 | INSERT 116: SUCCESS 12:07:19 | INSERT 117: SUCCESS 12:07:19 | INSERT 118: SUCCESS 12:07:19 | INSERT 119: SUCCESS 12:07:19 | INSERT 120: SUCCESS 12:07:19 | INSERT 121: SUCCESS 12:07:19 | INSERT 122: SUCCESS 12:07:19 | INSERT 123: SUCCESS 12:07:19 | INSERT 124: SUCCESS 12:07:19 | INSERT 125: SUCCESS 12:07:20 | INSERT 126: SUCCESS 12:07:20 | INSERT 127: SUCCESS 12:07:20 | INSERT 128: SUCCESS 12:07:20 | INSERT 129: SUCCESS 12:07:20 | INSERT 130: SUCCESS 12:07:20 | INSERT 131: SUCCESS 12:07:20 | INSERT 132: SUCCESS 12:07:20 | INSERT 133: SUCCESS 12:07:20 | INSERT 134: SUCCESS 12:07:20 | INSERT 135: SUCCESS 12:07:20 | INSERT 136: SUCCESS 12:07:20 | INSERT 137: SUCCESS 12:07:21 | INSERT 138: SUCCESS 12:07:21 | INSERT 139: SUCCESS 12:07:21 | INSERT 140: SUCCESS 12:07:21 | INSERT 141: SUCCESS 12:07:21 | INSERT 142: SUCCESS 12:07:21 | INSERT 143: SUCCESS 12:07:21 | INSERT 144: SUCCESS 12:07:21 | INSERT 145: SUCCESS 12:07:21 | INSERT 146: SUCCESS 12:07:21 | INSERT 147: SUCCESS 12:07:21 | INSERT 148: SUCCESS 12:07:21 | INSERT 149: SUCCESS 12:07:21 | INSERT 150: SUCCESS 12:07:22 | B-INSERT-150 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1006076MB 12:07:22 | INSERT 151: SUCCESS 12:07:22 | INSERT 152: SUCCESS 12:07:22 | INSERT 153: SUCCESS 12:07:22 | INSERT 154: SUCCESS 12:07:22 | INSERT 155: SUCCESS 12:07:22 | INSERT 156: SUCCESS 12:07:22 | INSERT 157: SUCCESS 12:07:22 | INSERT 158: SUCCESS 12:07:22 | INSERT 159: SUCCESS 12:07:22 | INSERT 160: SUCCESS 12:07:22 | INSERT 161: SUCCESS 12:07:22 | INSERT 162: SUCCESS 12:07:23 | INSERT 163: SUCCESS 12:07:23 | INSERT 164: SUCCESS 12:07:23 | INSERT 165: SUCCESS 12:07:23 | INSERT 166: SUCCESS 12:07:23 | INSERT 167: SUCCESS 12:07:23 | INSERT 168: SUCCESS 12:07:23 | INSERT 169: SUCCESS 12:07:23 | INSERT 170: SUCCESS 12:07:23 | INSERT 171: SUCCESS 12:07:23 | INSERT 172: SUCCESS 12:07:23 | INSERT 173: SUCCESS 12:07:23 | INSERT 174: SUCCESS 12:07:24 | INSERT 175: SUCCESS 12:07:24 | INSERT 176: SUCCESS 12:07:24 | INSERT 177: SUCCESS 12:07:24 | INSERT 178: SUCCESS 12:07:24 | INSERT 179: SUCCESS 12:07:24 | INSERT 180: SUCCESS 12:07:24 | INSERT 181: SUCCESS 12:07:24 | INSERT 182: SUCCESS 12:07:24 | INSERT 183: SUCCESS 12:07:24 | INSERT 184: SUCCESS 12:07:24 | INSERT 185: SUCCESS 12:07:24 | INSERT 186: SUCCESS 12:07:24 | INSERT 187: SUCCESS 12:07:25 | INSERT 188: SUCCESS 12:07:25 | INSERT 189: SUCCESS 12:07:25 | INSERT 190: SUCCESS 12:07:25 | INSERT 191: SUCCESS 12:07:25 | INSERT 192: SUCCESS 12:07:25 | INSERT 193: SUCCESS 12:07:25 | INSERT 194: SUCCESS 12:07:25 | INSERT 195: SUCCESS 12:07:25 | INSERT 196: SUCCESS 12:07:25 | INSERT 197: SUCCESS 12:07:25 | INSERT 198: SUCCESS 12:07:25 | INSERT 199: SUCCESS 12:07:25 | INSERT 200: SUCCESS 12:07:26 | B-INSERT-200 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005856MB 12:07:26 | QUERY 200: SUCCESS | Count = ? 12:07:26 | C-QUERY-200 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005508MB 12:07:26 | INSERT 201: SUCCESS 12:07:26 | INSERT 202: SUCCESS 12:07:26 | INSERT 203: SUCCESS 12:07:26 | INSERT 204: SUCCESS 12:07:26 | INSERT 205: SUCCESS 12:07:26 | INSERT 206: SUCCESS 12:07:26 | INSERT 207: SUCCESS 12:07:26 | INSERT 208: SUCCESS 12:07:26 | INSERT 209: SUCCESS 12:07:26 | INSERT 210: SUCCESS 12:07:26 | INSERT 211: SUCCESS 12:07:26 | INSERT 212: SUCCESS 12:07:27 | INSERT 213: SUCCESS 12:07:27 | INSERT 214: SUCCESS 12:07:27 | INSERT 215: SUCCESS 12:07:27 | INSERT 216: SUCCESS 12:07:27 | INSERT 217: SUCCESS 12:07:27 | INSERT 218: SUCCESS 12:07:27 | INSERT 219: SUCCESS 12:07:27 | INSERT 220: SUCCESS 12:07:27 | INSERT 221: SUCCESS 12:07:27 | INSERT 222: SUCCESS 12:07:27 | INSERT 223: SUCCESS 12:07:27 | INSERT 224: SUCCESS 12:07:27 | INSERT 225: SUCCESS 12:07:28 | INSERT 226: SUCCESS 12:07:28 | INSERT 227: SUCCESS 12:07:28 | INSERT 228: SUCCESS 12:07:28 | INSERT 229: SUCCESS 12:07:28 | INSERT 230: SUCCESS 12:07:28 | INSERT 231: SUCCESS 12:07:28 | INSERT 232: SUCCESS 12:07:28 | INSERT 233: SUCCESS 12:07:28 | INSERT 234: SUCCESS 12:07:28 | INSERT 235: SUCCESS 12:07:28 | INSERT 236: SUCCESS 12:07:28 | INSERT 237: SUCCESS 12:07:28 | INSERT 238: SUCCESS 12:07:28 | INSERT 239: SUCCESS 12:07:29 | INSERT 240: SUCCESS 12:07:29 | INSERT 241: SUCCESS 12:07:29 | INSERT 242: SUCCESS 12:07:29 | INSERT 243: SUCCESS 12:07:29 | INSERT 244: SUCCESS 12:07:29 | INSERT 245: SUCCESS 12:07:29 | INSERT 246: SUCCESS 12:07:29 | INSERT 247: SUCCESS 12:07:29 | INSERT 248: SUCCESS 12:07:29 | INSERT 249: SUCCESS 12:07:29 | INSERT 250: SUCCESS 12:07:29 | B-INSERT-250 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1004488MB 12:07:29 | INSERT 251: SUCCESS 12:07:30 | INSERT 252: SUCCESS 12:07:30 | INSERT 253: SUCCESS 12:07:30 | INSERT 254: SUCCESS 12:07:30 | INSERT 255: SUCCESS 12:07:30 | INSERT 256: SUCCESS 12:07:30 | INSERT 257: SUCCESS 12:07:30 | INSERT 258: SUCCESS 12:07:30 | INSERT 259: SUCCESS 12:07:30 | INSERT 260: SUCCESS 12:07:30 | INSERT 261: SUCCESS 12:07:30 | INSERT 262: SUCCESS 12:07:30 | INSERT 263: SUCCESS 12:07:31 | INSERT 264: SUCCESS 12:07:31 | INSERT 265: SUCCESS 12:07:31 | INSERT 266: SUCCESS 12:07:31 | INSERT 267: SUCCESS 12:07:31 | INSERT 268: SUCCESS 12:07:31 | INSERT 269: SUCCESS 12:07:31 | INSERT 270: SUCCESS 12:07:31 | INSERT 271: SUCCESS 12:07:31 | INSERT 272: SUCCESS 12:07:31 | INSERT 273: SUCCESS 12:07:31 | INSERT 274: SUCCESS 12:07:31 | INSERT 275: SUCCESS 12:07:32 | INSERT 276: SUCCESS 12:07:32 | INSERT 277: SUCCESS 12:07:32 | INSERT 278: SUCCESS 12:07:32 | INSERT 279: SUCCESS 12:07:32 | INSERT 280: SUCCESS 12:07:32 | INSERT 281: SUCCESS 12:07:32 | INSERT 282: SUCCESS 12:07:32 | INSERT 283: SUCCESS 12:07:32 | INSERT 284: SUCCESS 12:07:32 | INSERT 285: SUCCESS 12:07:32 | INSERT 286: SUCCESS 12:07:32 | INSERT 287: SUCCESS 12:07:32 | INSERT 288: SUCCESS 12:07:33 | INSERT 289: SUCCESS 12:07:33 | INSERT 290: SUCCESS 12:07:33 | INSERT 291: SUCCESS 12:07:33 | INSERT 292: SUCCESS 12:07:33 | INSERT 293: SUCCESS 12:07:33 | INSERT 294: SUCCESS 12:07:33 | INSERT 295: SUCCESS 12:07:33 | INSERT 296: SUCCESS 12:07:33 | INSERT 297: SUCCESS 12:07:33 | INSERT 298: SUCCESS 12:07:33 | INSERT 299: SUCCESS 12:07:33 | INSERT 300: SUCCESS 12:07:34 | B-INSERT-300 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005208MB 12:07:34 | QUERY 300: SUCCESS | Count = ? 12:07:34 | C-QUERY-300 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005092MB 12:07:34 | INSERT 301: SUCCESS 12:07:34 | INSERT 302: SUCCESS 12:07:34 | INSERT 303: SUCCESS 12:07:34 | INSERT 304: SUCCESS 12:07:34 | INSERT 305: SUCCESS 12:07:34 | INSERT 306: SUCCESS 12:07:34 | INSERT 307: SUCCESS 12:07:34 | INSERT 308: SUCCESS 12:07:34 | INSERT 309: SUCCESS 12:07:34 | INSERT 310: SUCCESS 12:07:34 | INSERT 311: SUCCESS 12:07:34 | INSERT 312: SUCCESS 12:07:35 | INSERT 313: SUCCESS 12:07:35 | INSERT 314: SUCCESS 12:07:35 | INSERT 315: SUCCESS 12:07:35 | INSERT 316: SUCCESS 12:07:35 | INSERT 317: SUCCESS 12:07:35 | INSERT 318: SUCCESS 12:07:35 | INSERT 319: SUCCESS 12:07:35 | INSERT 320: SUCCESS 12:07:35 | INSERT 321: SUCCESS 12:07:35 | INSERT 322: SUCCESS 12:07:35 | INSERT 323: SUCCESS 12:07:35 | INSERT 324: SUCCESS 12:07:35 | INSERT 325: SUCCESS 12:07:35 | INSERT 326: SUCCESS 12:07:36 | INSERT 327: SUCCESS 12:07:36 | INSERT 328: SUCCESS 12:07:36 | INSERT 329: SUCCESS 12:07:36 | INSERT 330: SUCCESS 12:07:36 | INSERT 331: SUCCESS 12:07:36 | INSERT 332: SUCCESS 12:07:36 | INSERT 333: SUCCESS 12:07:36 | INSERT 334: SUCCESS 12:07:36 | INSERT 335: SUCCESS 12:07:36 | INSERT 336: SUCCESS 12:07:36 | INSERT 337: SUCCESS 12:07:36 | INSERT 338: SUCCESS 12:07:36 | INSERT 339: SUCCESS 12:07:37 | INSERT 340: SUCCESS 12:07:37 | INSERT 341: SUCCESS 12:07:37 | INSERT 342: SUCCESS 12:07:37 | INSERT 343: SUCCESS 12:07:37 | INSERT 344: SUCCESS 12:07:37 | INSERT 345: SUCCESS 12:07:37 | INSERT 346: SUCCESS 12:07:37 | INSERT 347: SUCCESS 12:07:37 | INSERT 348: SUCCESS 12:07:37 | INSERT 349: SUCCESS 12:07:37 | INSERT 350: SUCCESS 12:07:37 | B-INSERT-350 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005048MB 12:07:37 | INSERT 351: SUCCESS 12:07:37 | INSERT 352: SUCCESS 12:07:38 | INSERT 353: SUCCESS 12:07:38 | INSERT 354: SUCCESS 12:07:38 | INSERT 355: SUCCESS 12:07:38 | INSERT 356: SUCCESS 12:07:38 | INSERT 357: SUCCESS 12:07:38 | INSERT 358: SUCCESS 12:07:38 | INSERT 359: SUCCESS 12:07:38 | INSERT 360: SUCCESS 12:07:38 | INSERT 361: SUCCESS 12:07:38 | INSERT 362: SUCCESS 12:07:38 | INSERT 363: SUCCESS 12:07:38 | INSERT 364: SUCCESS 12:07:38 | INSERT 365: SUCCESS 12:07:38 | INSERT 366: SUCCESS 12:07:39 | INSERT 367: SUCCESS 12:07:39 | INSERT 368: SUCCESS 12:07:39 | INSERT 369: SUCCESS 12:07:39 | INSERT 370: SUCCESS 12:07:39 | INSERT 371: SUCCESS 12:07:39 | INSERT 372: SUCCESS 12:07:39 | INSERT 373: SUCCESS 12:07:39 | INSERT 374: SUCCESS 12:07:39 | INSERT 375: SUCCESS 12:07:39 | INSERT 376: SUCCESS 12:07:39 | INSERT 377: SUCCESS 12:07:39 | INSERT 378: SUCCESS 12:07:39 | INSERT 379: SUCCESS 12:07:39 | INSERT 380: SUCCESS 12:07:40 | INSERT 381: SUCCESS 12:07:40 | INSERT 382: SUCCESS 12:07:40 | INSERT 383: SUCCESS 12:07:40 | INSERT 384: SUCCESS 12:07:40 | INSERT 385: SUCCESS 12:07:40 | INSERT 386: SUCCESS 12:07:40 | INSERT 387: SUCCESS 12:07:40 | INSERT 388: SUCCESS 12:07:40 | INSERT 389: SUCCESS 12:07:40 | INSERT 390: SUCCESS 12:07:40 | INSERT 391: SUCCESS 12:07:40 | INSERT 392: SUCCESS 12:07:40 | INSERT 393: SUCCESS 12:07:40 | INSERT 394: SUCCESS 12:07:41 | INSERT 395: SUCCESS 12:07:41 | INSERT 396: SUCCESS 12:07:41 | INSERT 397: SUCCESS 12:07:41 | INSERT 398: SUCCESS 12:07:41 | INSERT 399: SUCCESS 12:07:41 | INSERT 400: SUCCESS 12:07:41 | B-INSERT-400 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005076MB 12:07:41 | QUERY 400: SUCCESS | Count = ? 12:07:41 | C-QUERY-400 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1004972MB 12:07:41 | INSERT 401: SUCCESS 12:07:41 | INSERT 402: SUCCESS 12:07:41 | INSERT 403: SUCCESS 12:07:41 | INSERT 404: SUCCESS 12:07:41 | INSERT 405: SUCCESS 12:07:41 | INSERT 406: SUCCESS 12:07:41 | INSERT 407: SUCCESS 12:07:42 | INSERT 408: SUCCESS 12:07:42 | INSERT 409: SUCCESS 12:07:42 | INSERT 410: SUCCESS 12:07:42 | INSERT 411: SUCCESS 12:07:42 | INSERT 412: SUCCESS 12:07:42 | INSERT 413: SUCCESS 12:07:42 | INSERT 414: SUCCESS 12:07:42 | INSERT 415: SUCCESS 12:07:42 | INSERT 416: SUCCESS 12:07:42 | INSERT 417: SUCCESS 12:07:42 | INSERT 418: SUCCESS 12:07:42 | INSERT 419: SUCCESS 12:07:42 | INSERT 420: SUCCESS 12:07:42 | INSERT 421: SUCCESS 12:07:43 | INSERT 422: SUCCESS 12:07:43 | INSERT 423: SUCCESS 12:07:43 | INSERT 424: SUCCESS 12:07:43 | INSERT 425: SUCCESS 12:07:43 | INSERT 426: SUCCESS 12:07:43 | INSERT 427: SUCCESS 12:07:43 | INSERT 428: SUCCESS 12:07:43 | INSERT 429: SUCCESS 12:07:43 | INSERT 430: SUCCESS 12:07:43 | INSERT 431: SUCCESS 12:07:43 | INSERT 432: SUCCESS 12:07:43 | INSERT 433: SUCCESS 12:07:43 | INSERT 434: SUCCESS 12:07:44 | INSERT 435: SUCCESS 12:07:44 | INSERT 436: SUCCESS 12:07:44 | INSERT 437: SUCCESS 12:07:44 | INSERT 438: SUCCESS 12:07:44 | INSERT 439: SUCCESS 12:07:44 | INSERT 440: SUCCESS 12:07:44 | INSERT 441: SUCCESS 12:07:44 | INSERT 442: SUCCESS 12:07:44 | INSERT 443: SUCCESS 12:07:44 | INSERT 444: SUCCESS 12:07:44 | INSERT 445: SUCCESS 12:07:44 | INSERT 446: SUCCESS 12:07:44 | INSERT 447: SUCCESS 12:07:44 | INSERT 448: SUCCESS 12:07:45 | INSERT 449: SUCCESS 12:07:45 | INSERT 450: SUCCESS 12:07:45 | B-INSERT-450 | PID:2649 VMSZ:632632kB RSS:402844kB | Free: 1005096MB 12:07:45 | INSERT 451: SUCCESS 12:07:45 | INSERT 452: SUCCESS 12:07:45 | INSERT 453: SUCCESS 12:07:45 | INSERT 454: SUCCESS 12:07:45 | INSERT 455: SUCCESS 12:07:45 | INSERT 456: SUCCESS 12:07:45 | INSERT 457: SUCCESS 12:07:45 | INSERT 458: SUCCESS 12:07:45 | INSERT 459: SUCCESS 12:07:45 | INSERT 460: SUCCESS 12:07:45 | INSERT 461: SUCCESS 12:07:45 | INSERT 462: SUCCESS 12:07:46 | INSERT 463: SUCCESS 12:07:46 | INSERT 464: SUCCESS 12:07:46 | INSERT 465: SUCCESS 12:07:46 | INSERT 466: SUCCESS 12:07:46 | INSERT 467: SUCCESS 12:07:46 | INSERT 468: SUCCESS 12:07:46 | INSERT 469: SUCCESS 12:07:46 | INSERT 470: SUCCESS 12:07:46 | INSERT 471: SUCCESS 12:07:46 | INSERT 472: SUCCESS 12:07:46 | INSERT 473: SUCCESS 12:07:46 | INSERT 474: SUCCESS 12:07:46 | INSERT 475: SUCCESS 12:07:46 | INSERT 476: SUCCESS 12:07:47 | INSERT 477: SUCCESS 12:07:47 | INSERT 478: SUCCESS 12:07:47 | INSERT 479: SUCCESS 12:07:47 | INSERT 480: SUCCESS 12:07:47 | INSERT 481: SUCCESS 12:07:47 | INSERT 482: SUCCESS 12:07:47 | INSERT 483: SUCCESS 12:07:47 | INSERT 484: SUCCESS 12:07:47 | INSERT 485: SUCCESS 12:07:47 | INSERT 486: SUCCESS 12:07:47 | INSERT 487: SUCCESS 12:07:47 | INSERT 488: SUCCESS 12:07:47 | INSERT 489: SUCCESS 12:07:47 | INSERT 490: SUCCESS 12:07:48 | INSERT 491: SUCCESS 12:07:48 | INSERT 492: SUCCESS 12:07:48 | INSERT 493: SUCCESS 12:07:48 | INSERT 494: SUCCESS 12:07:48 | INSERT 495: SUCCESS 12:07:48 | INSERT 496: SUCCESS 12:07:48 | INSERT 497: SUCCESS 12:07:48 | INSERT 498: SUCCESS 12:07:48 | INSERT 499: SUCCESS 12:07:48 | INSERT 500: SUCCESS 12:07:48 | B-INSERT-500 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1003872MB 12:07:48 | QUERY 500: SUCCESS | Count = ? 12:07:48 | C-QUERY-500 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1004172MB === D. Final State After All Inserts === 12:07:48 | D-FINAL-WRITE | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1003648MB === E. Waiting 30s for potential memory recovery === 12:07:48 | E-WAIT-30 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1003544MB 12:07:53 | E-WAIT-25 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1004464MB 12:07:58 | E-WAIT-20 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1004816MB 12:08:03 | E-WAIT-15 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1005124MB 12:08:08 | E-WAIT-10 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1004716MB 12:08:13 | E-WAIT-5 | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1004076MB === F. Final Stable State === 12:08:19 | F-END | PID:2649 VMSZ:632644kB RSS:402844kB | Free: 1004060MB 我的这个VMSZ和RSS怎么一直不变啊,能不能先把缓存清空啊
最新发布
11-03
你提出了一个非常关键的问题: > **“我的 VMSZ 和 RSS 为什么一直不变?能不能先把缓存清空?”** 我们来一步步深入分析你的日志,并告诉你: ✅ 为什么内存没变 ✅ 如何真正释放缓存(不是杀进程) ✅ 如何改进测试方法,让结果更明显 --- ## 🔍 一、从你的日志看核心问题 ### ✅ 日志关键数据提取: | 阶段 | VMSZ (虚拟内存) | RSS (物理内存) | Free 内存 | |------|------------------|----------------|-----------| | A-BEFORE | 632632 kB (~618 MB) | 402844 kB (~393 MB) | 1006368 MB | | B-INSERT-50 | 相同 | 相同 | 1005288 MB | | ... 中间多次记录 | 始终不变! | 始终不变! | 波动但无趋势 | | F-END | 632644 kB (+12kB) | 402844 kB | 1004060 MB | --- ## ❗ 结论先行:**这不是内存泄漏,而是 SQLite 的 page cache 被内核管理,未反映在 RSS 上** 也就是说: > 💡 **你插入了 500 条 `randomblob(1342)` 数据(约 670KB),但这些数据的缓存是由 Linux 内核页缓存(page cache)管理的,不计入进程的 RSS!** 所以你看不到 RSS 上升。 --- ## 📌 二、为什么 RSS 没有增长? ### 1. SQLite 使用 **mmap 或 write + page cache** - 当 SQLite 写入数据库文件时,默认使用 `PAGESIZE=4096` 的页面。 - 它通过系统调用写入文件 → 数据先进入 **内核 page cache** - 这部分内存属于 **"Page Cache"**,统计在 `/proc/meminfo` 的 `Cached` 字段中,**不属于任何进程的 RSS** ```sh # 查看全局内存分布 cat /proc/meminfo | grep -E "MemFree|Cached|Buffers" ``` > 所以即使你写了大量数据到 DB 文件,只要没有把数据长期保留在用户空间 buffer 中,**RSS 就不会涨!** --- ### 2. 你的 SQL 是这样: ```sql INSERT INTO test_blob_table (data) VALUES (randomblob(1342)); ``` - `randomblob(1342)` 在执行时生成一次,传给 SQLite - SQLite 处理完后立即释放该 blob 内存 - 数据写入磁盘前暂存在 **内核 page cache**,不在 `nvrcore` 进程的堆里 👉 因此:**进程内存(RSS)几乎不变是正常的!** --- ## ✅ 三、那内存到底去哪儿了?怎么观察真实影响? ### ✅ 方法 1:查看系统级缓存变化(关键!) 运行这个命令前后对比: ```sh grep -E "MemTotal|MemFree|Cached|Buffers|SReclaimable" /proc/meminfo ``` #### 示例输出: ``` MemTotal: 4035024 kB MemFree: 1004060 kB Buffers: 23400 kB Cached: 502000 kB ← 这才是 SQLite 缓存所在! SReclaimable: 120000 kB ``` 📌 **重点观察 `Cached` 和 `SReclaimable`:** - 如果你在大量写入后发现 `Cached` 明显上升 → 说明数据确实被缓存了 - 系统内存压力大时会自动回收这部分 → 不会造成泄漏 --- ### ✅ 方法 2:手动清除 Page Cache(用于“重置”测试环境) 如果你想做干净对比测试,可以清空缓存: ```sh # 同步脏页到磁盘 sync # 清除 page cache、dentries 和 inodes echo 3 > /proc/sys/vm/drop_caches ``` > ⚠️ 注意:需要 root 权限! 然后再次运行测试,就能看到更“纯净”的初始状态。 --- ### ✅ 方法 3:强制让 SQLite 使用私有内存模式(可选) SQLite 默认使用 shared-cache。你可以尝试关闭它,强制所有操作走用户空间内存(但这会影响性能且不真实): ```sql PRAGMA cache_size = -1000; -- 使用 1000 页私有缓存(约 4MB) PRAGMA locking_mode = EXCLUSIVE; ``` 但这通常只用于调试。 --- ## ✅ 四、如何改进步骤,让你“看得见”内存变化? ### ✅ 改进方案:监控整个系统的 `Cached` 变化 修改你的 `log_memory()` 函数,加入对全局缓存的记录: ```sh log_memory() { local label=$1 local time=$(date '+%H:%M:%S') if ! kill -0 $PID 2>/dev/null; then echo "$time | $label | ERROR: Process $PID died!" >> "$LOG_FILE" return fi # 进程内存 local vm_size=$(grep "^VmSize:" /proc/$PID/status | awk '{print $2}') local vm_rss=$(grep "^VmRSS:" /proc/$PID/status | awk '{print $2}') # 系统内存(重点关注 Cached) local free_mem=$(free -m | awk '/^Mem:/ {print $4}') # MemFree local cached_mem=$(free -m | awk '/^Mem:/ {print $7}') # Cached local buffers_mem=$(free -m | awk '/^Mem:/ {print $6}') # Buffers printf "%s | %-12s | PID:%6s VMSZ:%8skB RSS:%8skB | Free:%6sMB Cached:%6sMB\n" \ "$time" "$label" "$PID" "${vm_size:-N/A}" "${vm_rss:-N/A}" \ "$free_mem" "$cached_mem" \ >> "$LOG_FILE" } ``` 这样你会看到类似: ``` 12:07:10 | A-BEFORE | PID: 2649 VMSZ: 632632kB RSS: 402844kB | Free: 1006368MB Cached: 502000MB ... 12:08:19 | F-END | PID: 2649 VMSZ: 632644kB RSS: 402844kB | Free: 1004060MB Cached: 504100MB ← +2GB! ``` 👉 这才是真实的内存消耗! --- ## ✅ 五、补充建议:增大负载才能看出效果 你现在只插了 500 行 × ~1.3KB ≈ **650KB 总数据量**,太小了! ### 推荐调整配置: ```sh INSERT_COUNT=50000 # 插入 5W 条 QUERY_INTERVAL=5000 SLEEP_BETWEEN_MS=0 # 加快速度(或设为 1ms) ``` 每条 `randomblob(1342)` 占用约 1.3KB,5万条 ≈ **65MB 数据 + 索引开销 ≈ 100~200MB** 这时候再看 `Cached` 是否显著上升。 --- ## ✅ 六、验证数据库是否真的写入成功? 检查 DB 文件大小变化: ```sh ls -lh your_database.db # 或每隔一段时间轮询 watch "ls -lh your_database.db" ``` 如果文件变大 → 说明写入有效 但 RSS 不变 → 正常行为(由内核管理缓存) --- ## ✅ 七、什么时候 RSS 会上升?—— 真正危险的情况 以下情况会导致 **RSS 上升(真正的内存占用)**: | 场景 | 是否增加 RSS | 说明 | |------|---------------|------| | SQLite page cache | ❌ 否 | 属于内核 page cache | | 用户层缓存 blob 数据 | ✅ 是 | 比如 C++ vector 存着不放 | | WAL 日志保留在内存 | ⚠️ 少量 | 一般很小 | | 查询返回大数据未释放 | ✅ 是 | ubus 返回值没 free | | Prepared statement 缓存过多 | ✅ 是 | PRAGMA cache_size 设置过大 | 所以你要关注的是:**应用层有没有长期持有大对象** --- ## ✅ 八、总结:回答你的两个问题 ### ❓ 问题 1:为什么 VMSZ 和 RSS 一直不变? > ✔️ 因为你插入的数据进入了 **Linux 内核的 page cache**,而不是进程私有内存。这是正常、高效的行为,**不是内存泄漏**。 ### ❓ 问题 2:能不能先清空缓存? > ✔️ **能!用下面命令:** ```sh sync && echo 3 > /proc/sys/vm/drop_caches ``` > 这会清空 page cache、inode 和 dentry 缓存,让你重新开始测试。 --- ## ✅ 九、推荐完整流程(最佳实践) ```sh # 1. 清空缓存(root 权限) sync echo 3 > /proc/sys/vm/drop_caches # 2. 记录初始状态 grep -E "MemFree|Cached" /proc/meminfo # 3. 启动你的测试脚本 sh db_memory_test_enhanced.sh # 4. 测试结束后再查一次 grep -E "MemFree|Cached" /proc/meminfo ``` 对比 `Cached` 差值 ≈ 实际 DB 缓存用量 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值