简体   繁体   English

在Android上使用SQL保存数据

[英]Saving data using SQL on android

public void createDatabase(){

        try {
            Class.forName("org.sqlite.JDBC").newInstance();

            Connection connection = DriverManager.getConnection("jdbc:sqlite:occDatabase.db");

            Statement statement = connection.createStatement();

            String sqlStatement = "CREATE TABLE 'Player_Data' (" +
                    "'userMoney' TEXT," +
                    "'oysters' TEXT," +
                    "'clams' TEXT," +
                    "'cockles' TEXT," +
                    "'oysterPrice' TEXT," +
                    "'clamPrice' TEXT," +
                    "'cocklePrice' TEXT," +
                    "'oysterMod' TEXT," +
                    "'clamMod' TEXT," +
                    "'cockleMod' TEXT," +
                    "'cartPrice' TEXT," +
                    "'fishStandPrice' TEXT," +
                    "'storePrice' TEXT," +
                    "'superMarketPrice' TEXT," +
                    "'cartAmount' TEXT," +
                    "'fishStandAmount' TEXT," +
                    "'storeAmount' TEXT," +
                    "'superMarketAmount' TEXT," +
                    ");";

            statement.execute(sqlStatement);
            connection.commit();
            statement.close();
            connection.close();



        } catch (Exception e){
        }
    }

    public void writeToDatabase(){
        try{

            clearData();

            createDatabase();

            Class.forName("org.sqlite.JDBC");

            Connection connection = DriverManager.getConnection("jdbc:sqlite:occDatabase.db");

            Statement statement = connection.createStatement();

            String sqlStatemnt = "INSERT INTO Player_Data(userMoney,oysters,clams,cockles,oysterPrice,clamPrice,cocklePrice,oysterMod,clamMod,cockleMod" +
                    ",cartPrice,fishStandPrice,storePrice,superMarketPrice,cartAmount,fishStandAmount,storeAmount,superMarketAmount) " +
                    "VALUES('" + MainActivity.userMoney + "', '"+ GatheringSystem.oysters +"', '" + GatheringSystem.clams +"', '" + GatheringSystem.cockles +"'," +
                    " '" + Modifiers.oysterPrice +"', '" + Modifiers.clamPrice +"', '" + Modifiers.cocklePrice  +"', '" + Modifiers.oysterMod +"', '" + Modifiers.clamMod +"', '" + Modifiers.cockleMod +
                    "', '" + MainActivity.cartPrice +"', '" + MainActivity.fishStandPrice +"', '" + MainActivity.storePrice +"', '" + MainActivity.superMarketPrice +"', '" + MainActivity.cartAmount +"'," +
                    " '" + MainActivity.fishStandAmount +"', '" + MainActivity.storeAmount +"', '" + MainActivity.superMarketAmount +"')";

            statement.execute(sqlStatemnt);
            connection.commit();
            statement.close();
            connection.close();


        }catch (Exception e){

        }
    }

    public void readFromDatabase(){

        Connection connection = null;
        Statement statement = null;

        try {

            Class.forName("org.sqlite.JDBC").newInstance();

            connection = DriverManager.getConnection("jdbc:sqlite:occDatabase.db");

            statement = connection.createStatement();

        } catch (Exception e){

        }

        try{

            ResultSet resultSet = statement.executeQuery("SELECT * FROM Player_Data");

            while (resultSet.next()){
                MainActivity.userMoney = Double.parseDouble(resultSet.getString("userMoney"));

                MainActivity.cartPrice = Double.parseDouble(resultSet.getString("cartPrice"));
                MainActivity.fishStandPrice = Double.parseDouble(resultSet.getString("fishStandPrice"));
                MainActivity.storePrice = Double.parseDouble(resultSet.getString("storePrice"));
                MainActivity.superMarketPrice = Double.parseDouble(resultSet.getString("superMarketPrice"));

                MainActivity.cartAmount = Integer.parseInt(resultSet.getString("cartAmount"));
                MainActivity.fishStandAmount = Integer.parseInt(resultSet.getString("fishStandAmount"));
                MainActivity.storeAmount = Integer.parseInt(resultSet.getString("storeAmount"));
                MainActivity.superMarketAmount = Integer.parseInt(resultSet.getString("superMarketAmount"));

                Modifiers.oysterPrice = Double.parseDouble(resultSet.getString("oysterPrice"));
                Modifiers.clamPrice = Double.parseDouble(resultSet.getString("clamPrice"));
                Modifiers.cocklePrice = Double.parseDouble(resultSet.getString("cocklePrice"));

                Modifiers.oysterMod = Double.parseDouble(resultSet.getString("oysterMod"));
                Modifiers.clamMod = Double.parseDouble(resultSet.getString("clamMod"));
                Modifiers.cockleMod = Double.parseDouble(resultSet.getString("cockleMod"));

                GatheringSystem.oysters = Double.parseDouble(resultSet.getString("oysters"));
                GatheringSystem.clams = Double.parseDouble(resultSet.getString("clams"));
                GatheringSystem.cockles = Double.parseDouble(resultSet.getString("cockles"));

            }

            resultSet.close();
            statement.close();
            connection.close();

            MainActivity.databaseStarted = true;
        } catch (Exception e){
            MainActivity.databaseStarted = false;
        }
    }

}

So I am really new to coding for android and I am trying to save data for my game, so that when I come back on to the game I can read from the files. 因此,我真的是为android编写代码的新手,我正在尝试为游戏保存数据,以便当我回到游戏中时可以从文件中读取内容。

At the moment it doesn't seem to be creating a 'database' at all. 目前,它似乎根本没有在创建“数据库”。

Do I need to give it certain permissions? 我需要给它某些权限吗? or can it automatically create files on a users phone? 还是可以在用户手机上自动创建文件?

private void databaseMethod(){

    database.readFromDatabase();

    if(!databaseStarted){
        database.createDatabase();
        toast = toast.makeText(getApplicationContext(),"Created Database",Toast.LENGTH_SHORT);
        toast.show();
    }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    distThread.setDaemon(true);
    distThread.start();
    databaseMethod();
    File file = new File(getFilesDir(), "occDatebase.db");
}

@Override
protected void onPause() {
    super.onPause();
    database.writeToDatabase();
    toast = toast.makeText(getApplicationContext(),"Game Saved",Toast.LENGTH_SHORT);
    toast.show();
}

On creation I check to see if there is already a database, if not it should be creating one. 创建时,我检查是否已经有一个数据库,如果没有,则应该创建一个数据库。

But it doesnt even seem to be doing that. 但它甚至似乎都没有这样做。

Any suggestions? 有什么建议么?

Thanks. 谢谢。

Android does not have JDBC. Android没有JDBC。

And all the try / except blocks suppress any error messages. 并且所有的try / except块抑制任何错误消息。

For how to use the Android database framework, see the documentation , or any tutorial. 有关如何使用Android数据库框架的信息,请参阅文档或任何教程。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM