【问题标题】:SQLITE Error E/SQLiteLog﹕ (1) near "monthly": syntax errorSQLITE Error E/SQLiteLog: (1) near "monthly": 语法错误
【发布时间】:2015-04-24 14:22:23
【问题描述】:

您好,我收到一条 SQL 错误提示 E/SQLiteLog:(1)接近“每月”:语法错误

我相信这可能与我的 create Table 语句有关

  private static final String CREATE_TABLE2 = "CREATE TABLE " + TABLE_NAME2 + " (" + UID +
        " INTEGER PRIMARY KEY AUTOINCREMENT, " + POST_CODE + " VARCHAR(255)," + FIRST_LINE +
        " VARCHAR(255)," + TOWN + " VARCHAR(255)," + COUNTY + " VARCHAR(255)," + ROOM_NO +
        " INTEGER ," + ASKING_PRICE + " INTEGER ," + CURRENT_OFFER + " INTEGER ," + AGREED_PRICE +
        " INTEGER ," + AGENT_NAME + " VARCHAR(255)," + AGENT_PHO_NUM + " VARCHAR(255)," + ESTATE_AGENT_NAME +
        " VARCHAR(255), " + REFURB_COST + " VARCHAR(255), " + TIME_OF_APPOINTMENT + " VARCHAR(255), "
        + DONE_UP_VALUE + " INTEGER ," +WEEKLY_ROOM_RATE+ " INTEGER ," +EXPECTED_RENT + " INTEGER ," + MAX_OFFER + " INTEGER ,"
        + DISCOUNT_PERCENT + " DECIMAL(3,2) ," + LOAN_TO_VALUE + " DECIMAL(3,2) ,"+ MORTGAGE_Interest + "DECIMAL(3,2) ," +
        MAX_MORTGAGE + " INTEGER ," + DESPOSIT_NEEDED + " INTEGER ," + DESPOSIT_REPAYMENT_MONTHLY+ " INTEGER ," + REPAYMENT_ANNAUL + " INTEGER ,"
        +STAMP_DUTY_PER + " DECIMAL(3,2) ," + STAMP_DUTY_ACT + " INTEGER ," +INSURENCES+ " INTEGER ," + TOTAL_PURCHASE_COSTS +
        " INTEGER ," + TOTAL_MONEY_NEEDED + " INTEGER ," + MORTGAGE_REPAYMENT + " INTEGER ," +
        BILLS_UTILS + " INTEGER ," + TOTAL_COST_PER_MONTH + " INTEGER ," + TOTAL_REFURB_COST + " INTEGER ," + TOTAL_PROJECT_COST +
        " INTEGER ,"+ TOTAL_PROFIT + " INTEGER ,"+ RENTAL_PROFIT + " INTEGER);";

这是我添加到我的数据库的 insertData 方法

public long insertData2(String posCode, String firstLine, String town, String county, int roomNum,
                       int askingPrice, int currentOffer, int agreedPrice, String agentName,
                       String agentPhone, String estateAgentNam, int refurb, String Time, int doneUp,int expectedRent
                        , int weeklyRent, int maxOffer,double discountPercent, double LoanToValue,Double mortgageInterest
                        , int maxMOrtgage , int despositNeeded, int despositRepayment, int despositRepaymentAnnual, double stampDutyPer,
                       int stampDutyAct , int insurances, int totalPurchaseCost,int moneyNeeded, int mortgageRepayments,int billsUtils,
                       int costPerMonth, int refurbCost , int projectCost, int totalProfit, int rentProfit) {

    ContentValues contentValues = new ContentValues();
    contentValues.put(POST_CODE, posCode);
    contentValues.put(FIRST_LINE, firstLine);
    contentValues.put(TOWN, town);
    contentValues.put(COUNTY, county);
    contentValues.put(ROOM_NO, roomNum);
    contentValues.put(ASKING_PRICE, askingPrice);
    contentValues.put(CURRENT_OFFER, currentOffer);
    contentValues.put(AGREED_PRICE, agreedPrice);
    contentValues.put(AGENT_NAME, agentName);
    contentValues.put(AGENT_PHO_NUM, agentPhone);
    contentValues.put(ESTATE_AGENT_NAME, estateAgentNam);
    contentValues.put(REFURB_COST, refurb);
    contentValues.put(TIME_OF_APPOINTMENT, Time);
    contentValues.put(DONE_UP_VALUE,doneUp);
    contentValues.put(WEEKLY_ROOM_RATE,weeklyRent);
    contentValues.put(EXPECTED_RENT,expectedRent);
    contentValues.put(MAX_OFFER,maxOffer);
    contentValues.put(DISCOUNT_PERCENT,discountPercent);
    contentValues.put(LOAN_TO_VALUE,LoanToValue);
    contentValues.put(MORTGAGE_Interest,mortgageInterest);
    contentValues.put(MAX_MORTGAGE,maxMOrtgage);
    contentValues.put(DESPOSIT_NEEDED,despositNeeded);
    contentValues.put(DESPOSIT_REPAYMENT_MONTHLY,despositRepayment);
    contentValues.put(REPAYMENT_ANNAUL,despositRepaymentAnnual);
    contentValues.put(STAMP_DUTY_PER,stampDutyPer);
    contentValues.put(STAMP_DUTY_ACT,stampDutyAct);
    contentValues.put(INSURENCES,insurances);
    contentValues.put(TOTAL_PURCHASE_COSTS,totalPurchaseCost);
    contentValues.put(TOTAL_MONEY_NEEDED,moneyNeeded);
    contentValues.put(MORTGAGE_REPAYMENT,mortgageRepayments);
    contentValues.put(BILLS_UTILS,billsUtils);
    contentValues.put(TOTAL_COST_PER_MONTH,costPerMonth);
    contentValues.put(TOTAL_REFURB_COST,refurbCost);
    contentValues.put(TOTAL_PROJECT_COST,projectCost);
    contentValues.put(TOTAL_PROFIT,totalProfit);
    contentValues.put(RENTAL_PROFIT,rentProfit);




    long id = db.insert(TABLE_NAME2, null, contentValues);
    return id;


}

我一直在看教程和在线检查,但我似乎看不出我哪里出错了,有人可以帮忙吗?

更新完整错误信息

翻新总成本=0 所需资金总额=1501 保险费=1 实际印花税=0 EstateAgentName=测试租金利润=11 抵押利息=1.0 AgreedPrice=0 AddressFirstLine=测试抵押还款=0 印花税百分比=0.0 项目总成本=1503 AskingPrice=3000 每月总成本=1 max_offer=-24 RefurbCost=0 总利润=3565275 需要存款=0 discount_percent=0.0 doneUpValue=3566778 County=test PostCode=test loan to value=1.0 NumberOfRooms=3 bills utils=1 Town=stevenage timeOfAppointment=27 AgentName=27 Max Mortgage=-24 还款年限=0 预计租金=12 AgentPhoneNumber=test

android.database.sqlite.SQLiteException: near "monthly": syntax error (code 1): , while compile: INSERT INTO Viewed(repayment Monthly,CurrentOffer,Total Purchase costs,weekly room rate,total refurb cost,Total Money需要,保险,实际印花税,房地产经纪人名称,租金利润,抵押利息,协议价格,地址第一行,抵押还款,印花税百分比,项目总成本,要价,每月总成本,最大报价,翻新成本,总利润,所需存款,折扣百分比, doneUpValue,county,PostCode,loan to value,NumberOfRooms,bills utils,Town,timeOfAppointment, AgentName,Max Mortgage,Repayment Annual,Expected rent, AgentPhoneNumber) VALUES (?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?)

【问题讨论】:

  • 显示 CREATE_TABLE2 值的字符串
  • @PiotrGolinski 嗨对不起我有点新你是什么意思?
  • 如果您在使用 val 'CREATE_TABLE2 ' 的行添加断点,您将可以看到它的外观(在调试模式下)。然后粘贴到这里
  • @PiotrGolinski 抱歉听起来像个大白痴,但我还是新手,我不知道如何使用 android studio 添加断点,
  • 1.找到第 2 行。点击左侧,靠近第 3 行。应该可以看到红点 4 点击调试开始

标签: android mysql sqlite


【解决方案1】:

基本上你没有正确构造你的 sql,这发生在你的长串连接元素中的“每月”附近。

这条sql错误太多了:

INSERT INTO Viewed(repayment monthly,CurrentOffer,Total Purchase
costs,weekly room rate,total refurb cost,Total Money Needed, ...) 

您正在使用空格作为列名。

我有两个技巧可以用来构建更简单的 sql。

  1. 首先使用 MySql 客户端,如 Workbench,借助其 GUI 工具更轻松地构建您的表(但要确保数据类型与 Sqlite 兼容)。当查询即将执行时,您可以看到原始 sql,您可以稍后将其复制粘贴到您的项目中。
  2. 不要使用这样的字符串连接。使用String.format

    String sql = String.format(
              "CREATE TABLE %s (%s,%s)",
              TABLE_NAME2,
              UID + " INTEGER PRIMARY KEY AUTOINCREMENT",
              POST_CODE + " VARCHAR(255)");
    

【讨论】:

  • 知道如何解决这个问题,我创建了一个有效的 sql 表 1,我试图复制该过程
  • 这就像大海捞针。问题是您可能在字符串中缺少“)”或类似的东西。但是,我有一些您会发现有用的提示。我会编辑答案
  • 谢谢你,我真的很感激任何帮助
  • 我添加了字符串格式,但我仍然收到错误代码(虽然它不会使我的应用程序崩溃)
  • 与我早期发布的相同,我已经用完整的错误代码更新了我的问题:/
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 2016-06-22
  • 2023-01-10
  • 2013-11-09
相关资源
最近更新 更多