在android中插入和检索手机号码到数据库

时间:2012-09-24 12:30:38

标签: android database

    n1 = (EditText) findViewById(R.id.num1);
    int no1 = Integer.parseInt(n1.getText().toString());
    n2 = (EditText) findViewById(R.id.num2);
    int no2 = Integer.parseInt(n2.getText().toString());
    message = (EditText) findViewById(R.id.message);
    String msg = message.getText().toString();
    settings.execSQL("CREATE TABLE IF NOT EXISTS settingtb(mob1 LONG,mob2 LONG,time VARCHAR,message VARCHAR(1000));");
    settings.execSQL("INSERT INTO settingtb VALUES('" + no1 + "','" + no2
            + "'," + time + ",'" + msg + "');");

如果mob1,mob2值小于10,如果超过9个值,则数据被插入到数据库中即可获得数字格式异常

这是我的logcat

09-24 18:16:23.594: E/AndroidRuntime(1656): FATAL EXCEPTION: main
09-24 18:16:23.594: E/AndroidRuntime(1656): java.lang.NumberFormatException: Invalid int: "7842334531"
09-24 18:16:23.594: E/AndroidRuntime(1656):     at java.lang.Integer.invalidInt(Integer.java:138)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at java.lang.Integer.parse(Integer.java:378)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at java.lang.Integer.parseInt(Integer.java:366)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at java.lang.Integer.parseInt(Integer.java:332)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at com.example.esha.settings.calltable(settings.java:87)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at com.example.esha.settings$1.onClick(settings.java:76)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at android.view.View.performClick(View.java:4084)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at android.view.View$PerformClick.run(View.java:16966)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at android.os.Handler.handleCallback(Handler.java:615)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at android.os.Looper.loop(Looper.java:137)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at android.app.ActivityThread.main(ActivityThread.java:4745)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at java.lang.reflect.Method.invokeNative(Native Method)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at java.lang.reflect.Method.invoke(Method.java:511)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-24 18:16:23.594: E/AndroidRuntime(1656):     at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:1)

您需要将此整数变量更改为long,如下所示

long no2 = Long.parseLong(n2.getText().toString().trim());

您正在以错误的方式插入值,您在mob1&中插入字符串值mob2字段,将其转换为数字,如下所示,

settings.execSQL("INSERT INTO settingtb VALUES(" + no1 + "," + no2
            + "," + time + ",'" + msg + "');");

插入数值时,无需添加'

同样当你获取值时,你做错了,你正在访问整数变量中的所有内容???按照以下方式改变它,

c.moveToFirst();  
     if(c!=null)
     {
      do{
        long c1 = c.getColumnIndex("mob1");
        long c2 = c.getColumnIndex("mob2");
        String c3 = c.getColumnIndex("time");
        String c4 = c.getColumnIndex("message");

        s1 = c.getString(c1);
        s2 = c.getString(c2);
        s3 = c.getString(c3);
        s4 = c.getString(c4);

答案 1 :(得分:0)

非常简单..实际上只使用Double数据类型而不是long

答案 2 :(得分:0)

你的异常是否发生在这一行:“s3 = Integer.parseInt(c.getString(c3));”?

您可能超出 int 范围:-2,147,483,648到2,147,483,647。尝试使用来存储电话号码。

修改

替换此行:

s3 = Integer.parseInt(c.getString(c3));

有了这个:

long s3Long = Integer.parseInt(c.getString(c3));